content_tags 里面 content_tag
content_tags inside of a content_tag
当我在 content_tag 内嵌套多个 content_tag 时,HTML 输出中仅包含最近嵌套的标签。
我正在创建一个创建 bootstrap 导航栏的辅助函数:
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
这导致导航栏仅包含 'server' 列表项:
<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>
我需要对我的代码进行哪些更改才能生成预期的 boostrap 菜单?
看起来你真的很接近。要记住的是 content_tag
returns 一个 HTML 字符串。当几个直接嵌套时,效果很好。但是,当您在同一嵌套级别有两个或更多 content_tag 表达式时,只有最后一个表达式返回到周围的块;较早的那些不会存储在任何地方,也不是块的结果。
我只看到两个地方有两个 content_tag 块处于同一嵌套级别。修复它的最简单方法可能是执行以下操作:
tag1 = content_tag( ... )
tag2 = content_tag( ... )
(tag1 + tag2).html_safe
可能需要也可能不需要 html_safe;你可以两种方式都试试看。如果是这样,那只是因为字符串连接。除此之外,你看起来还不错。
当我在 content_tag 内嵌套多个 content_tag 时,HTML 输出中仅包含最近嵌套的标签。
我正在创建一个创建 bootstrap 导航栏的辅助函数:
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
这导致导航栏仅包含 'server' 列表项:
<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>
我需要对我的代码进行哪些更改才能生成预期的 boostrap 菜单?
看起来你真的很接近。要记住的是 content_tag
returns 一个 HTML 字符串。当几个直接嵌套时,效果很好。但是,当您在同一嵌套级别有两个或更多 content_tag 表达式时,只有最后一个表达式返回到周围的块;较早的那些不会存储在任何地方,也不是块的结果。
我只看到两个地方有两个 content_tag 块处于同一嵌套级别。修复它的最简单方法可能是执行以下操作:
tag1 = content_tag( ... )
tag2 = content_tag( ... )
(tag1 + tag2).html_safe
可能需要也可能不需要 html_safe;你可以两种方式都试试看。如果是这样,那只是因为字符串连接。除此之外,你看起来还不错。