2011-10-11 36 views
0

所以我想要做的是根據Flash消息的類型(即錯誤,通知等)將不同的類應用於包含Flash消息的div。爲什麼此塊不會循環顯示所有的Flash消息? - Rails 3.1

我有這個在我的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 -%> 

但是,它總是輸出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 -%> 

如果你注意到,在上面的代碼,我在爲error==warning,我有=notice。那麼,在這種情況下,它實際上就像我想要的那樣輸出notice div。看起來,當我檢查="error"時,它完全退出條件,無論檢查是否正確。但是一旦我添加==它甚至不會進行檢查。非常奇怪!

+0

我喜歡採用編碼約定明確,以避免這種情況。訓練自己編寫'var.eql? 「string」或「string」== var'可以節省您的調試時間。 – maxenglander

+0

但是我在這裏做'var =「string」'所以不知道你的意思。 – marcamillion

+0

順便說一句,在我的情況'name.eql「字符串」'不起作用。它失敗了,並沒有輸出正確的'div'。所以不知道發生了什麼事。 – marcamillion

回答

6

難道是因爲你沒有檢查平等嗎?

不是檢查相等

<% if name = "error" %> 

支票平等

<% if name == "error" %> 

它也可能是您正在檢查的字符串。閃存散列由符號索引。

嘗試

<% if name == :error %> 
+0

現在它根本不顯示Flash消息。 – marcamillion

+0

+1。我會添加一個'case'語句在那裏會更好。 – apneadiving

+0

我更新了發生了什麼問題。 – marcamillion