当我在一个content_tag中嵌套多个其他content_tag时,只有最近嵌套的标记才会包含在content_tag输出中。
我正在创建一个创建引导导航条的助手函数:
def navigation_menu
content_tag(:nav, class: "navbar navbar-default") do
content_tag(:div, class: "container") do
content_tag(:div, class: "navbar-header") do
button_tag(type: "button", class: "navbar-toggle collapsed") do
content_tag(:span, "Toggle navigation", class: "sr-only")
content_tag(:span, class: "icon-bar")
content_tag(:span, class: "icon-bar")
content_tag(:span, class: "icon-bar")
end
content_tag(:a, "Brand", {class: "navbar-brand", href: "#"})
end
content_tag(:div, class: "collapse navbar-collapse") do
content_tag(:ul, class: "nav navbar-nav") do
content_tag(:li) do
link_to "Companies", companies_path
end
content_tag(:li) do
link_to "Servers", servers_path
end
end
end
end
end
end这将导致一个仅包含“服务器”列表项的导航栏:
<nav class="navbar navbar-default">
<div class="container">
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="/servers">Servers</a></li>
</ul>
</div>
</div>
</nav>为了生成预期的引导菜单,我需要对代码进行哪些更改?
发布于 2015-02-24 16:26:03
你看起来真的很亲密。需要记住的是,content_tag返回一个HTML。当有几个被直接嵌套时,它就算得很好了。但是,当在同一个嵌套级别上有两个或多个content_tag表达式时,只有最后一个表达式返回到周围的块;早期的表达式不会存储在任何地方,也不是块的结果。
我只看到两个地方在同一嵌套级别上有两个content_tag块。解决这个问题的最简单的方法可能是做如下的事情:
tag1 = content_tag( ... )
tag2 = content_tag( ... )
(tag1 + tag2).html_safe可能需要html_safe,也可以不需要;您可以尝试使用这两种方法来查看。如果是这样的话,那只是因为字符串连接。除此之外,你所拥有的一切看起来都很好。
https://stackoverflow.com/questions/28700358
复制相似问题