繁体   English   中英

将块传递到rails3中的标签助手

[英]Passing block to label helper in rails3

我想用一些嵌套元素创建标签标签。 我正在使用标签辅助程序,并尝试将内部html作为块传递,但生成的HTML看起来不符合我的预期。 ERB:

<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标签助手中的错误还是错误。 对于其他助手,阻止传球效果很好。

谢谢,Michał

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

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

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

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

因此,这是预期的行为-看起来Rails团队已故意以此方式构建它。

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

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

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

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

在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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM