轨道形式的单选按钮的标签

Bry*_*yan 142 forms ruby-on-rails

我的问题类似于这个, 但对于Rails应用程序.

我有一个带有一些单选按钮的表单,并希望将标签与它们相关联.的label形式辅助只需表单字段作为参数,但在这种情况下,我有一个单一的表单字段多个单选按钮.我看到的唯一方法是手动创建标签,硬编码为单选按钮自动生成的ID.有谁知道更好的方法吗?

例如:

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

这会产生类似于:

<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
Run Code Online (Sandbox Code Playgroud)

我想要的是:

<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>
Run Code Online (Sandbox Code Playgroud)

Joh*_*hat 224

传递:value选项f.label将确保label标签的for属性与相应的id相同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 %>
Run Code Online (Sandbox Code Playgroud)

请参阅ActionView :: Helpers :: FormHelper#label

:value选项,用于定位radio_button标签的标签

  • 好吧,这可能有0票,因为它是在几个月后回答,但实际上它是好的.警告:你需要Rails> = 2.3.3 (4认同)
  • 此方法还会在必要时呈现 `field_with_errors` div(使用 `:contactmethod_email` 方法时不会显示)。这是正确答案! (3认同)

Mat*_*ley 140

<% 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 %>
Run Code Online (Sandbox Code Playgroud)

  • 还有另一种方法:将`:value`选项传递给`f.label`也会做同样的事情.例如`<%= f.label:contactmethod,'SMS',:value =>'sms'%>`.这样可以正确设置标签标签的"for"属性,这样点击标签就会选择相应的单选按钮.在上面的答案中,简单地使用`label`帮助器将导致使用FormBuilder创建单选按钮时"for"属性不正确 (89认同)
  • 对于未来的读者,John Douthat对这个问题有正确的答案.这个答案不再正确. (7认同)
  • 我只是想说,作为Rails的新手,我发现这个答案是我一直回归的.这是继续奉献的礼物.好吧,直到我记得正确的语法反正... :) (2认同)