为什么这个阻止不会遍历我的所有flash消息? - Rails 3.1

mar*_*ion 0 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

所以我想要做的是根据flash消息的类型(即错误,通知等)将不同的类应用于包含flash消息的div.

我有这个application.html.erb:

 <%- flash.each do |name, msg| -%>
        <% if name = "error" %>
            <%= content_tag :div, msg, :id => "flash_#{name}", :class => "alert-message error" %>
        <% elsif name = "notice" %>
            <%= content_tag :div, msg, :id => "flash_#{name}", :class => "alert-message success" %>
        <% elsif name = "warning" %>
            <%= content_tag :div, msg, :id => "flash_#{name}", :class => "alert-message warning" %>
        <% end %>
      <%- end -%>
Run Code Online (Sandbox Code Playgroud)

但是,它总是输出divid=flash_error.

这是为什么?

更新1:

如果我将相等性检查更改为==,则似乎完全跳过该部分if语句.

 <%- flash.each do |name, msg| -%>
        <% if name == "error" %>
            <%= content_tag :div, msg, :id => "flash_#{name}", :class => "alert-message error" %>
        <% elsif name = "notice" %>
            <%= content_tag :div, msg, :id => "flash_#{name}", :class => "alert-message success" %>
        <% elsif name == "warning" %>
            <%= content_tag :div, msg, :id => "flash_#{name}", :class => "alert-message warning" %>
        <% end %>
      <%- end -%>
Run Code Online (Sandbox Code Playgroud)

如果您发现,在上面的代码,我==errorwarning我有=进行notice.好吧,在这种情况下,它实际上输出了notice div我想要的东西.似乎当我检查="error"它时完全退出条件,无论检查是否正确.但是,一旦我添加==它甚至没有做检查似乎.非常离奇!

max*_*der 6

可能是因为你没有检查平等吗?

不是对平等的检查

<% if name = "error" %>
Run Code Online (Sandbox Code Playgroud)

检查是否平等

<% if name == "error" %>
Run Code Online (Sandbox Code Playgroud)

也可能是您正在检查字符串.闪存哈希由符号索引.

尝试

<% if name == :error %>
Run Code Online (Sandbox Code Playgroud)