导轨forms的单选button的标签

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

我有一个单选button的forms,并希望与他们关联的标签。 label表单助手只需要一个表单域作为参数,但在这种情况下,我有一个单一的表单字段的多个单选button。 我看到做的唯一方法是手动创build一个标签,硬编码为单选button自动生成的ID。 有谁知道有更好的方法来做到这一点?

例如:

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

这产生了类似于:

 <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 

我想要的是:

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

:value选项传递给f.label将确保label标签的for属性与相应的radio_button的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 %> 

请参阅ActionView :: Helpers :: FormHelper#标签

:value选项,旨在为radio_button标签定位标签

如果您希望object_name的前缀为任何ID,则应在表单对象上调用窗体帮助器:

 - form_for(@message) do |f| = f.label :email 

这也确保任何提交的数据存储在内存中,如果有任何validation错误等

如果您不能在表单对象上调用表单帮助器方法,例如,如果您正在使用标记助手(radio_button_tag等),则可以使用以下内容插入名称:

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

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