2009-04-14 15 views
126

मेरा प्रश्न this one के लिए, लेकिन एक रेल अनुप्रयोग के लिए समान है।लेबल फार्म

मैं कुछ रेडियो बटन के साथ एक रूप है, और उन लोगों के साथ लेबल संबद्ध करना चाहते हैं। label फॉर्म हेल्पर केवल पैरामीटर के रूप में एक फॉर्म फ़ील्ड लेता है, लेकिन इस मामले में मेरे पास एक ही फॉर्म फ़ील्ड के लिए कई रेडियो बटन हैं। ऐसा करने का एकमात्र तरीका यह है कि इसे मैन्युअल रूप से लेबल बनाना है, जो रेडियो बटन के लिए स्वत: जेनरेट की गई आईडी को हार्ड कोडिंग करना है। क्या किसी को ऐसा करने का बेहतर तरीका पता है?

उदाहरण के लिए:

<label for="message_contactmethod">Contactmethod</label> 
<input checked="checked" id="message_contactmethod_email" name="message[contactmethod]" value="email" type="radio"> Email 
<input id="message_contactmethod_sms" name="message[contactmethod]" value="sms" type="radio"> SMS 

मैं क्या चाहता हूँ:

<% form_for(@message) do |f| %> 
    <%= label :contactmethod %> 
    <%= f.radio_button :contactmethod, 'email', :checked => true %> Email 
    <%= f.radio_button :contactmethod, 'sms' %> SMS 
<% end %> 

कुछ इस तरह उत्पन्न करता है

<input checked="checked" id="message_contactmethod_email" name="message[contactmethod]" value="email" type="radio"><label for="message_contactmethod_email">Email</label> 
<input id="message_contactmethod_sms" name="message[contactmethod]" value="sms" type="radio"> <label for="message_contactmethod_sms">SMS</label> 
+0

धन्यवाद अपने प्रश्न टयन कोड ने मेरी मदद की :) –

उत्तर

125
<% form_for(@message) do |f| %> 
    <%= f.radio_button :contactmethod, 'email', :checked => true %> 
    <%= label :contactmethod_email, 'Email' %> 
    <%= f.radio_button :contactmethod, 'sms' %> 
    <%= label :contactmethod_sms, 'SMS' %> 
<% end %> 
+77

एक और तरीका भी है: 'f.label' को 'मान' विकल्प पास करना वही काम करेगा। जैसे '<% = f.label: contactmethod, 'एसएमएस',: value => 'sms'%>'। यह लेबल टैग की "के लिए" विशेषता को सही तरीके से सेट करता है, जो लेबल पर क्लिक करके उचित रेडियो बटन का चयन करता है। इस सवाल का जवाब ऊपर में, बस 'label' सहायक का उपयोग कर का कारण होगा गलत विशेषता" के लिए "जब रेडियो बटन FormBuilder –

+2

साथ बनाई गई है मैं सिर्फ रेल के लिए एक नवागंतुक के रूप में, मैं पाया है कि इस का जवाब कहना चाहता एक मैं वापस आ रहा हूँ। यह उपहार है जो देने पर रहता है। ठीक है, जब तक मैं उचित सिंटैक्स वैसे भी याद ... :) –

+0

भी इस जाँच आप देख रहे हैं 'checked' मूल्य सशर्त http://stackoverflow.com/a/4708921/429521 –

1

आप OBJECT_NAME किसी भी आईडी को पहले से जुड़ा हुआ चाहते हैं तो आप फार्म पर फॉर्म हेल्पर्स को कॉल करना चाहिए वस्तु:

- form_for(@message) do |f| 
    = f.label :email 

यह भी सुनिश्चित करें कि किसी भी सबमिट किए गए डेटा स्मृति में संग्रहीत किया जाता है वहाँ किसी भी सत्यापन त्रुटियों आदि होना चाहिए बनाता है

आप फार्म वस्तु पर प्रपत्र सहायक विधि, उदाहरण के लिए कॉल करता है, तो नहीं कर सकते इस मामले में

= radio_button_tag "#{f.object_name}[email]", @message.email 

आप किसी भी प्रस्तुतियाँ संरक्षित करने के लिए मैन्युअल रूप से मान निर्दिष्ट करने होंगे: यदि आप किसी टैग सहायक का उपयोग कर रहे (radio_button_tag आदि) आप का उपयोग कर नाम को जोड़ सकते हैं। मूल्य विकल्प है, जो बनाया गया है:

199

f.label करने के लिए :value विकल्प लेबल टैग की for विशेषता यह सुनिश्चित करेंगे पासिंग ActionView::Helpers::FormHelper#label

देखें इसी radio_button

<% form_for(@message) do |f| %> 
    <%= f.radio_button :contactmethod, 'email' %> 
    <%= f.label :contactmethod, 'Email', :value => 'email' %> 
    <%= f.radio_button :contactmethod, 'sms' %> 
    <%= f.label :contactmethod, 'SMS', :value => 'sms' %> 
<% end %> 

की आईडी के रूप में ही है radio_button टैग के लिए लेबल को लक्षित करने के

+4

अच्छी तरह से, इसमें 0 वोट हो सकते हैं क्योंकि इसे महीनों बाद उत्तर दिया गया था, लेकिन असल में यह अच्छा है। चेतावनी: आपको रेल की आवश्यकता है> = 2.3.3 – tokland

+0

यह विधि आवश्यक होने पर 'field_with_errors' div भी प्रस्तुत करती है (जो': contactmethod_email' विधि का उपयोग करते समय दिखाई नहीं देती है)।यह सही जवाब है! – caesarsol

संबंधित मुद्दे