Rails - 为什么HAML显示完整哈希?

时间:2012-12-05 04:57:29

标签: html ruby ruby-on-rails-3 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

无论flash(:成功还是:错误或其他),它总是将整个哈希编译为html(下面)

输出:

<!DOCTYPE html>
…
    <div class='container'>
            <div class='alert alert-wrong'>no</div>
{:wrong=&gt;&quot;no&quot;}
    </div>
  </body>
</html>

我不知道为什么显示{:wrong=&gt;&quot;no&quot;}。我一直盯着这个码头好几个小时。有趣的是,散列是使用container id输出的,而不是alert类。这感觉就像是一个缩进问题,但我经历了几次排列并没有成功。

1 个答案:

答案 0 :(得分:3)

调用-块时,您需要使用=而不是each

-flash.each do |key, value|
  %div{class: "alert alert-#{key}"} #{value}

来自docs

  

也可以将Ruby代码嵌入到Haml文档中。等号=,将输出代码的结果。连字符 - ,将运行代码但不输出结果。

所以你看到了哈希,因为=将输出each块的结果(哈希本身,即{:wrong=>"no"})。