Passing block to label helper in rails3

夙愿已清 提交于 2019-12-01 04:30:46

My understanding is that you need to use the label_tag helper in this case:

<%= label_tag "my_label_name" do %>
  <span>Inner span</span>
<% end %>

The reason for this is that although the form label helper fills out the "for" attribute for you (using your model object attribute), you don't need it with nested elements.

When you have an open label tag (rather than self-closing), that wraps the inner content, the "for" attribute is not needed, because the label is obviously associated with its nested content (this is known as implicit association).

So, this is expected behaviour - it looks like the Rails team have deliberately built it this way.

Scott Lowe's answer is correct, although I'd take it one step further... You don't even need to use the Rails label_tag for this. Just use raw html like so:

<label>
  <span>Inner span</span>
</label>

If you are associating the label with a form element (like a radio button):

<label>
  <%= f.radio_button :approval_state, 'R' %>
  Rejected
</label>

In Rails 3.2.11 this is working for me:

<span>Span element</span>
<%= label :item, :method do %>
  <span>Inner span</span>
<% end %>

Result:

<span>Span element</span>
<label for="item_method">
  <span>Inner span</span>
</label>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!