Rails上的单选button

类似于这个问题: Rails上的checkbox

在Ruby on Rails中制作与某个问题相关的单选button的正确方法是什么? 目前我有:

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

我也希望能够自动检查以前select的项目(如果这个表单被重新加载)。 我将如何加载参数到这些的默认值?

正如在这之前的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] 

与V相同,但每个单选button都有相关的标签。 点击标签检查单选button。

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

使用Haml,摆脱不必要的br标签,并在标签内嵌套input,以便可以在不将标签与id匹配的情况下进行select。 还使用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 

我build议看看formtastic

它使得单选button和checkbox集合更加简单和简洁。 你的代码看起来像这样:

  <% 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在很大程度上是不显眼的,可以与“经典”forms构build者混合和匹配。 您也可以重写窗体的formtastic css类,就像我以上所做的一样
:html => {:class => 'my_style'}

看看相关的Railscasts。

更新:我最近搬到了简单的forms ,它有类似的语法formtastic,但更轻量级,尤其是离开的样式到自己的CSS。

嗯,从文档我不知道如何设置单选button上的ID …标签的属性尝试链接到收音机上的ID。

rails文档radio_button_tag

也就是说,从文档来看,第一个参数是“名称”……如果这是它所创build的, 应该将它们全部组合在一起。 如果没有,也许它是一个错误?

嗯,不知道这些是否已经修复: http : //dev.rubyonrails.org/ticket/2879 http://dev.rubyonrails.org/ticket/3353