Кто-то может объяснить мне, почему у content_tag другое поведение в поле зрения и помощники? Простой код, подобный приведенному ниже, возвращает (1) в представлении, но (2), когда в помощнике.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')
в Helper, он оказывает <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
Хммм хороший. Похоже, я положил конкат в неправильное место. Кажется, это немного беспорядочно, любой другой лучший способ сделать это? – delta
Вы можете отделить свой код, чтобы сделать его более читаемым ... – Leantraxxx