查看:
!!!
%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
无论flash(:成功还是:错误或其他),它总是将整个哈希编译为html(下面)
输出:
<!DOCTYPE html>
…
<div class='container'>
<div class='alert alert-wrong'>no</div>
{:wrong=>"no"}
</div>
</body>
</html>
我不知道为什么显示{:wrong=>"no"}
。我一直盯着这个码头好几个小时。有趣的是,散列是使用container
id输出的,而不是alert
类。这感觉就像是一个缩进问题,但我经历了几次排列并没有成功。
答案 0 :(得分:3)
调用-
块时,您需要使用=
而不是each
:
-flash.each do |key, value|
%div{class: "alert alert-#{key}"} #{value}
来自docs:
也可以将Ruby代码嵌入到Haml文档中。等号=,将输出代码的结果。连字符 - ,将运行代码但不输出结果。
所以你看到了哈希,因为=
将输出each
块的结果(哈希本身,即{:wrong=>"no"}
)。