Ruby on rails rails表单中单选按钮的标签

Ruby on rails rails表单中单选按钮的标签,ruby-on-rails,forms,Ruby On Rails,Forms,我的问题类似于 但是对于Rails应用程序 我有一个带有一些单选按钮的表单,希望将标签与它们关联起来。标签表单帮助器仅将表单字段作为参数,但在本例中,对于单个表单字段,我有多个单选按钮。我看到的唯一方法是手动创建标签,对单选按钮自动生成的ID进行硬编码。有人知道更好的方法吗 例如: <% form_for(@message) do |f| %> <%= label :contactmethod %> <%= f.radio_button :conta

我的问题类似于 但是对于Rails应用程序

我有一个带有一些单选按钮的表单,希望将标签与它们关联起来。
标签
表单帮助器仅将表单字段作为参数,但在本例中,对于单个表单字段,我有多个单选按钮。我看到的唯一方法是手动创建标签,对单选按钮自动生成的ID进行硬编码。有人知道更好的方法吗

例如:

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

true%>电子邮件
短讯服务
这会产生如下结果:

<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
Contactmethod
电子邮件
短讯服务
我想要的是:

<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>
电子邮件
短讯服务

正确%>

如果要在任何ID前面加上对象名,则应在表单对象上调用表单帮助程序:

- form_for(@message) do |f|
  = f.label :email
这还可以确保在出现任何验证错误等情况下,任何提交的数据都存储在内存中

如果无法在表单对象上调用form helper方法,例如,如果正在使用标记辅助对象(单选按钮标记等),则可以使用以下方法插入名称:

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

在这种情况下,您需要手动指定值以保留任何提交。

:value
选项传递到
f.label
将确保标签标签的
for
属性与相应的
单选按钮的id相同

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

'电子邮件'%>
'短信'>

:value选项,该选项设计为单选按钮标签的目标标签


如果传递给表单的模型已填充此属性,则使用
true
/
false
作为值将预先填充字段:

=f.单选按钮(:public?,true)
=f.标签(:public?,“yes”,值:true)
=f.单选按钮(:public?,false)
=f.标签(:public?,“no”,值:false)

这是我项目中使用
单选按钮及其
标签进行评级的示例



还有另一种方法:将
:value
选项传递给
f.label
也会做同样的事情。e、 g.
“短信”%>
。这将正确设置标签标签的“for”属性,从而使单击标签选择相应的单选按钮。在上面的答案中,当使用FormBuilder创建单选按钮时,简单地使用
标签
助手将导致“for”属性不正确。我只是想说,作为Rails的新手,我发现这个答案是我一直在重复的。这是不断给予的礼物。好吧,直到我记住正确的语法为止……:)如果您希望有条件地为将来的读者设置
checked
值,也请选中此项,John Dou对此问题有正确的答案。这个答案不再正确了。好吧,这个可能有0票,因为它是在几个月后回答的,但实际上它是好的。警告:您需要Rails>=2.3.3此方法还可以在必要时呈现带有错误的
字段(在使用
:contactmethod\u email
方法时不会显示)。这是正确的答案!
<% 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 %>