2009-03-08 36 views
57

इस सवाल का समान: Checkboxes on Railsरेडियो बटन

कि रूबी ऑन रेल्स में एक निश्चित सवाल से जुड़े हुए हैं रेडियो बटन बनाने का सही तरीका क्या है? फिलहाल मेरे पास है:

<div class="form_row"> 
    <label for="theme">Theme:</label> 
    <br><%= radio_button_tag 'theme', 'plain', true %> Plain 
    <br><%= radio_button_tag 'theme', 'desert' %> Desert 
    <br><%= radio_button_tag 'theme', 'green' %> Green 
    <br><%= radio_button_tag 'theme', 'corporate' %> Corporate 
    <br><%= radio_button_tag 'theme', 'funky' %> Funky 
</div> 

मैं भी अपने आप पहले से चयनित आइटम की जाँच करने में सक्षम होना चाहते हैं (यदि इस फार्म गया था फिर से लोड)। मैं पैराम को इनके डिफ़ॉल्ट मान में कैसे लोड करूं?

उत्तर

74

this previous post में के रूप में, एक मामूली मोड़ के साथ:

<div class="form_row"> 
    <label for="theme">Theme:</label> 
    <% [ 'plain', 'desert', 'green', 'corporate', 'funky' ].each do |theme| %> 
     <br><%= radio_button_tag 'theme', theme, @theme == theme %> 
     <%= theme.humanize %> 
    <% end %> 
</div> 

कहाँ

@theme = params[:theme] 
+3

आप को आसान बनाने में कर सकता है '[ 'सादे', 'रेगिस्तान', 'हरी', 'कॉरपोरेट', 'फैशनेबल']'% करने के लिए 'डब्ल्यू (सादा रेगिस्तान हरी कॉर्पोरेट फंकी)' – gabe

1

हम्म, दस्तावेज़ों से मैं नहीं देखता कि आप रेडियो बटन पर आईडी कैसे सेट कर सकते हैं ... विशेषता के लिए लेबल रेडियो पर आईडी से लिंक करने का प्रयास करता है।

rails docs for radio_button_tag

जिसके अनुसार, दस्तावेज़ से, जो सबसे पहले परम "नाम" है ... जो कि अगर यह क्या पैदा कर रही है, चाहिए उन्हें समूह alltogether है। यदि नहीं, शायद यह एक बग है?

हम्म, आश्चर्य अगर इन निर्धारित किया गया है: http://dev.rubyonrails.org/ticket/2879 http://dev.rubyonrails.org/ticket/3353

36

वी के रूप में एक ही है, लेकिन प्रत्येक रेडियो बटन के साथ लेबल जुड़े हैं। लेबल पर क्लिक करने से रेडियो बटन चेक हो जाता है।

<div class="form_row"> 
    <p>Theme:</p> 
    <% [ 'plain', 'desert', 'green', 'corporate', 'funky' ].each do |theme| %> 
    <br><%= radio_button_tag 'theme', theme, @theme == theme %> 
    <%= label_tag "theme_#{theme}", theme.humanize %> 
    <% end %> 
</div> 
+0

का उपयोग करते हुए 'label_tag' में मदद करता है यूएक्स में सुधार :) – abhishek77in

4

मैं formtastic

पर एक नज़र यह रेडियो बटन बनाता होने का सुझाव और बॉक्स संग्रह बेहद आसान और अधिक संक्षिप्त की जाँच करेगा। आपका कोड तो ऐसा दिखाई देगा:

<% semantic_form_for @widget, :html => {:class => 'my_style'} do |f| %> 
<%= f.input :theme, :as => :radio, :label => "Theme:", 
:collection => [ 'plain', 'desert', 'green', 'corporate', 'funky' ] %> 
<% end %> 

Formtastic काफी हद तक विनीत है और मिश्रित और "क्लासिक" प्रपत्र बिल्डरों के साथ मिलान किया जा सकता है। तुम भी रूप में मैं
:html => {:class => 'my_style'}

साथ ऊपर किया प्रासंगिक Railscasts पर एक नज़र डालें फार्म के लिए formtastic सीएसएस वर्ग ओवरराइड कर सकते हैं।

अद्यतन: मैंने हाल ही में Simple Form पर स्थानांतरित किया है जिसमें फॉर्मेटास्टिक के समान वाक्यविन्यास है लेकिन अधिक हल्का है और विशेष रूप से स्टाइल को अपने स्वयं के सीएसएस में छोड़ देता है।

8

हैमल का उपयोग करना, अनावश्यक ब्र टैग से छुटकारा पाने, और लेबल के भीतर घोंसले इनपुट ताकि उन्हें लेबल से मेल खाने के बिना चयन किया जा सके। Form_for का भी उपयोग कर रहा है। मैं इसे सर्वोत्तम प्रथाओं का पालन करने पर विचार करता हूं।

= form_for current_user do |form| 
    .form_row 
    %label Theme: 
    - [ 'plain', 'desert', 'green', 'corporate', 'funky' ].each do |theme| 
     %label 
     = form.radio_button(:theme, theme) 
     = theme.humanize 
संबंधित मुद्दे