有人可以解释一下为什么 content_tag 在视图和助手中有不同的行为?像下面这样的简单代码在视图中返回 (1),但在 Helper 中返回 (2)。
arr = ["a", "b", "c"]
concat content_tag(:ul, :class => 'a class') do
arr.each do |item|
concat content_tag(:li, item)
end
end
(1)
<ul class="a class">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
(2)
<ul>{:class=>"a class"}</ul>
在 Helper 中使用content_tag(:ul, '', :class => 'a class')
时,它会呈现<ul class="a class"></ul>
. 为什么也会有这种不同的行为?
content_tag 的行为非常令人困惑。我用捕获(另一种令人困惑的方法!)方法尝试了一些魔法,但没有任何成功。
所以......有什么想法吗?
PS.:我正在使用 Rails 4
- - - - - - -编辑 - - - - - - -
由于我的例子真的很糟糕,我真正想做的是这样的事情:
def language_dropdown
content_tag :li, class: "dropdown language" do
concat content_tag(:a, content_tag(:span, I18n.locale, class: "username"),
class: "dropdown-toggle", data: { toggle: "dropdown", hover: "dropdown", "close-others" => "true" } )
concat( content_tag(:ul, class: "dropdown-menu") do
I18n.available_locales.each do |locale|
if locale != I18n.locale
locale_key = "translation.#{locale}"
content_tag :li do
concat(link_to I18n.t(locale_key), url_for(locale: locale.to_s))
end
end
end
end)
end.html_safe
end