[英]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.