轨形单选按钮的标签

我的问题类似于这个问题 而是一个 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>
147823 次浏览
<% 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 %>

如果希望在任何 ID 前面加上 object _ name,应该在 form 对象上调用 form helpers:

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

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

如果不能在表单对象上调用表单助手方法,例如,如果您使用标记助手(单选按钮 _ 标记等) ,您可以使用以下方法插入名称:

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

在这种情况下,您需要手动指定值来保留所有提交。

:value选项传递给 f.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 # label

Value 选项,其设计目标是单选按钮标记的标签

如果传递给表单的模型已经填充了这个属性,那么使用 true/false作为值将预先填充字段:

= f.radio_button(:public?, true)
= f.label(:public?, "yes", value: true)
= f.radio_button(:public?, false)
= f.label(:public?, "no", value: false)

这个例子从我的项目使用 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>