Rails - Почему HAML показывает полный хэш?
Посмотреть:
!!!
%html
%head
%title= full_title(yield(:title))
=stylesheet_link_tag "application", media: "all"
=javascript_include_tag "application"
=csrf_meta_tags
=render 'layouts/shim'
%body
=render 'layouts/header'
.container
=flash.each do |key, value|
%div{class: "alert alert-#{key}"} #{value}
контроллер
def create
@user = User.new(params[:user])
if @user.save
flash[:success] = "This is Correct"
redirect_to @user
else
flash[:wrong] = "no"
render 'new'
end
end
Независимо от флеш-памяти (:success или: неправильно или иначе) он всегда компилирует весь хэш в виде html (ниже)
Выход:
<!DOCTYPE html>
…
<div class='container'>
<div class='alert alert-wrong'>no</div>
{:wrong=>"no"}
</div>
</body>
</html>
Я не имею понятия почему {:wrong=>"no"}
отображается Я смотрел на этот терминал часами. Интересно то, что хеш выводится с container
идентификатор, но не в alert
учебный класс. Это похоже на проблему с отступами, но я прошел несколько перестановок, но безуспешно.
1 ответ
Решение
Вам нужно использовать -
а не =
когда вы звоните each
блок:
-flash.each do |key, value|
%div{class: "alert alert-#{key}"} #{value}
Из документов:
Также возможно встраивать код Ruby в документы Haml. Знак равенства, =, выведет результат кода. Дефис, -, запустит код, но не выведет результат.
Итак, вы видите хэш, потому что =
выведет результат each
блок (сам хеш, т.е. {:wrong=>"no"}
).