रेल बटन के लिए लेबल रेल के रूप में


147

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

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

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

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

यह कुछ उत्पन्न करता है:

<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

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

<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>

जवाबों:


145
<% 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 %>

91
एक और तरीका भी है: एक :valueविकल्प पारित f.labelकरने के लिए एक ही काम करेंगे। उदा <%= f.label :contactmethod, 'SMS', :value => 'sms' %>। यह लेबल टैग की "के लिए" विशेषता को सही ढंग से सेट करता है, जो लेबल पर क्लिक करके उपयुक्त रेडियो बटन का चयन करता है। ऊपर दिए गए उत्तर में, बस labelसहायक का उपयोग करने पर "के लिए" विशेषता गलत हो जाएगी जब रेडियो बटन फॉर्मब्यूलर के साथ बनाया जाता है
जॉन

2
मैं सिर्फ यह कहना चाहता था कि रेल के लिए एक नवागंतुक के रूप में, मुझे यह उत्तर मिल गया है कि मैं वापस आ रहा हूं। यह उपहार है जो देता रहता है। खैर, जब तक मुझे उचित वाक्यविन्यास याद है, तब तक ... :)
जॉन गैलाघर

इस जाँच आप देख रहे हैं स्थापित करने के लिए checkedसशर्त मूल्य stackoverflow.com/a/4708921/429521
फेलिप साबिनो

8
भविष्य के पाठकों के लिए, जॉन Douthat के पास इस प्रश्न का सही उत्तर है। यह उत्तर अब सही नहीं है।
सुपरलुमिनरी

230

लेबल टैग की विशेषता सुनिश्चित :valueकरने के लिए विकल्प को f.labelपास करना forसंबंधित की आईडी के समान है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 %>

देखें एक्शन व्यू :: हेल्पर्स :: फॉर्मेलपर # लेबल

: मान विकल्प, जिसे रेडियो_बटन टैग के लिए लेबल को लक्षित करने के लिए डिज़ाइन किया गया है


5
ठीक है, इसमें 0 वोट हो सकते हैं क्योंकि यह महीनों बाद उत्तर दिया गया था, लेकिन वास्तव में यह अच्छा है।
कैविएट

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

1

यदि आप चाहते हैं कि आप जिस किसी भी आईडी से किसी वस्तु आईडी को कॉल करें, तो आपको फॉर्म ऑब्जेक्ट पर फॉर्म हेल्पर्स को कॉल करना चाहिए:

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

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

यदि आप प्रपत्र ऑब्जेक्ट पर प्रपत्र सहायक विधि को कॉल नहीं कर सकते हैं, उदाहरण के लिए यदि आप टैग हेल्पर (Radio_button_tag आदि) का उपयोग कर रहे हैं, तो आप नाम का उपयोग करके प्रक्षेप कर सकते हैं:

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

इस मामले में आपको किसी भी सबमिशन को संरक्षित करने के लिए मैन्युअल रूप से मूल्य निर्दिष्ट करने की आवश्यकता होगी।


0

मान के रूप में true/ का उपयोग करने से falseपहले से भरा फ़ील्ड होगा यदि मॉडल को फॉर्म में पास किया गया है, तो यह विशेषता पहले से ही भरी हुई है:

= f.radio_button(:public?, true)
= f.label(:public?, "yes", value: true)
= f.radio_button(:public?, false)
= f.label(:public?, "no", value: false)

0

यह radioबटन और इसके labelएस का उपयोग करके रेटिंग के लिए मेरी परियोजना से एक उदाहरण है

<div class="rating">
  <%= form.radio_button :star, '1' %>
  <%= form.label :star, '☆', value: '1' %>

  <%= form.radio_button :star, '2' %>
  <%= form.label :star, '☆', value: '2' %>

  <%= form.radio_button :star, '3' %>
  <%= form.label :star, '☆', value: '3' %>

  <%= form.radio_button :star, '4' %>
  <%= form.label :star, '☆', value: '4' %>

  <%= form.radio_button :star, '5' %>
  <%= form.label :star, '☆', value: '5' %>
</div>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.