1
有人可以解釋爲什麼content_tag在視圖和助手中有不同的行爲?一個簡單的代碼如下所示,在視圖中返回(1),但在(2)在Helper中時。content_tag在視圖和助手中的行爲不同
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>
當在助手用content_tag(:ul, '', :class => 'a class')
,它呈現<ul class="a class"></ul>
。爲什麼這種不同的行爲呢?
content_tag的行爲非常混亂。我用捕獲(另一種令人困惑的方法!)方法嘗試了一些魔法,但沒有任何成功。
那麼...有什麼想法?
PS:我使用的是軌道4
-------------編輯--------------
由於我的例子是非常糟糕的,我真正想要做的是somethind這樣的:
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
在帖子中查看我的更新。 – delta
嗯,不錯。它看起來像我把concat放在錯誤的地方。這似乎有點混亂,任何其他更好的方式來做到這一點? – delta
你可以分開你的代碼,使其更具可讀性。 – Leantraxxx