导轨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
在这种情况下,您需要手动指定值以保留任何提交。