59

类似于这个问题:Rails 上的复选框

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

我还希望能够自动检查以前选择的项目(如果重新加载了此表单)。我如何将参数加载到这些的默认值中?

4

5 回答 5

76

与上一篇文章一样,略有不同:

<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]
于 2009-03-08T06:03:02.110 回答
41

与 V 相同,但每个单选按钮都有关联的标签。单击标签会检查单选按钮。

<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>
于 2009-07-25T06:20:00.160 回答
8

使用 Haml,摆脱不必要的 br 标签,并将输入嵌套在标签中,以便在不匹配标签与 id 的情况下选择它们。也使用 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
于 2012-02-06T22:06:49.280 回答
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 在很大程度上是不引人注目的,可以与“经典”表单构建器混合和匹配。您还可以像我上面所做的那样覆盖表单的 formtastic css 类
:html => {:class => 'my_style'}

看看相关的 Railscasts。

更新:我最近搬到了Simple Form,它的语法与 formtastic 相似,但更轻量级,尤其是将样式留给您自己的 css。

于 2010-06-11T20:53:49.053 回答
1

嗯,从文档中我看不到如何在单选按钮上设置 ID……标签的 for 属性试图链接到单选按钮上的 ID。

radio_button_tag 的 rails 文档

也就是说,从文档中,第一个参数是“名称”......如果这是它正在创建的,应该将它们组合在一起。如果没有,也许它是一个错误?

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

于 2009-03-08T05:14:20.230 回答