如果flash名称=='请注意'不在rails视图中工作

时间:2014-06-19 17:06:29

标签: ruby-on-rails

<% flash.each do |key, msg| %>
  <% if key == 'notice' %>
      <%= content_tag :div, "<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;</button> #{key}".html_safe, class: 'alert alert-success alert-dismissable' %>
  <% elsif key == 'alert' %>
      <%= content_tag :div, "<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;</button> #{msg}".html_safe, class: 'alert alert-danger alert-dismissable' %>
  <% end %>
<% end %>

不适合我。

  • 当我做<% if true %>时,它有效。
  • 当我输出key时,它会显示notice

为什么不起作用?

2 个答案:

答案 0 :(得分:11)

对于Rails 4及以下,闪存keySymbol,对于Rails 4.1,闪存keyString。我想你正在使用Rails 4 or under并比较它们的String等价物,这是你问题的根源。

您可以通过两种方式解决此问题:

  1. 将密钥从Symbol转换为String,然后将其与String noticealert进行比较。这种方式更好,因为稍后当您将Rails版本升级到4.1时,您将不会再遇到当前问题。

    <% if key.to_s == 'notice' %>
      <%# .. %>
    <% elsif key.to_s == 'alert' %>
      <%# ..%>
    <% end %> 
    
  2. 直接与符号:notice:alert进行比较。这将暂时有效,但在升级Rails版本时无效。

    <% if key == :notice %>
      <%# .. %>
    <% elsif key == :alert %>
      <%# ..%>
    <% end %> 
    

答案 1 :(得分:0)

Flash提供符号哈希,访问它们的正确方法是:

if key == :notice

elseif key == :alert