7

我想用一些嵌套元素创建标签标签。我正在使用标签助手并尝试将内部 html 作为块传递,但生成的 HTML 看起来不像我预期的那样。再培训局:

<span>Span element</span>
<%= label("object", "method") do %>
  <span>Inner span</span>
<% end %>

HTML 输出:

<span>Span element</span> 
<span>Inner span</span> 

<label for="object_method">
<span>Span element</span> 
  <span>Inner span</span> 
</label>

当我使用 <% %> 标记传递内部 html 时,输出应该是:
ERB:

<span>Span element</span>
<%= label("object", "method") do %>
  <% raw '<span>Inner span</span>' %>
<% end %>

HTML 输出:

<span>Span element</span>
<label for="object_method">
  <span>Inner span</span>
</label>

我想知道这是否是我在 ActionView 标签助手中的错误或错误。对于其他助手,阻止传递工作正常。

谢谢,米哈乌

4

3 回答 3

13

我的理解是在这种情况下您需要使用 label_tag 助手:

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

这样做的原因是尽管表单标签助手为您填写了“for”属性(使用您的模型对象属性),但嵌套元素不需要它。

当您有一个包装内部内容的开放标签标签(而不是自关闭标签)时,不需要“for”属性,因为标签显然与其嵌套内容相关联(这称为隐式关联)。

所以,这是预期的行为——看起来 Rails 团队故意以这种方式构建它。

于 2011-05-22T14:31:01.553 回答
4

Scott Lowe 的回答是正确的,尽管我会更进一步......您甚至不需要为此使用 Rails label_tag。只需像这样使用原始html:

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

如果您将标签与表单元素(如单选按钮)相关联:

<label>
  <%= f.radio_button :approval_state, 'R' %>
  Rejected
</label>
于 2012-06-11T04:21:01.663 回答
1

在 Rails 3.2.11 中,这对我有用:

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

结果:

<span>Span element</span>
<label for="item_method">
  <span>Inner span</span>
</label>
于 2013-03-02T12:32:42.877 回答