我的问题类似于this one 但对于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 %>
这会生成如下内容:
<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>
答案 0 :(得分:214)
将:value
选项传递给f.label
可确保标签标记的for
属性与相应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 %>
请参阅ActionView::Helpers::FormHelper#label
:value选项,用于定位radio_button标签的标签
答案 1 :(得分:136)
<% 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 %>
答案 2 :(得分:1)
如果您希望object_name前缀为任何ID,您应该在表单对象上调用表单助手:
- form_for(@message) do |f|
= f.label :email
如果存在任何验证错误等,这也可以确保任何提交的数据都存储在内存中。
如果您无法在表单对象上调用表单帮助程序方法,例如,如果您正在使用标记帮助程序(radio_button_tag等),则可以使用以下内容插入名称:
= radio_button_tag "#{f.object_name}[email]", @message.email
在这种情况下,您需要手动指定值以保留任何提交。
答案 3 :(得分:0)
使用true
/ false
作为值,如果传递给表单的模型已经填充了此属性,则该字段将被预先填充:
= f.radio_button(:public?, true)
= f.label(:public?, "yes", value: true)
= f.radio_button(:public?, false)
= f.label(:public?, "no", value: false)
答案 4 :(得分:0)
这是我的项目中使用radio
按钮及其label
进行评级的示例
<div class="rating">
<%= form.radio_button :star, '1' %>
<%= form.label :star, '☆', value: '1' %>
<%= form.radio_button :star, '2' %>
<%= form.label :star, '☆', value: '2' %>
<%= form.radio_button :star, '3' %>
<%= form.label :star, '☆', value: '3' %>
<%= form.radio_button :star, '4' %>
<%= form.label :star, '☆', value: '4' %>
<%= form.radio_button :star, '5' %>
<%= form.label :star, '☆', value: '5' %>
</div>