2011-10-11 5 views
0

私がやっていることは、フラッシュメッセージのタイプ(エラー、通知など)に応じて、フラッシュメッセージを含むdivに別のクラスを適用することです。なぜこのブロックはすべてのフラッシュメッセージを循環しませんか? - 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 -%> 

しかし、それは常にid=flash_errordivを出力しています。

なぜですか?

アップデート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 -%> 

あなたが気付いた場合は、上記のコードでは、私がerrorwarningのために==を持っていると私はnoticeため=を持っています。まあ、この場合は実際にはnotice divを出力します。 ="error"の小切手をチェックすると、小切手が正しいかどうかにかかわらず、条件付きですべて終了するようです。しかし、一度私は==を追加しても、それは見えるチェックをしません。非常に奇妙な!

+0

が、私はこのような状況を避けるために特別にコーディング規則を採用したいとしてください。 'var.eql? "string"または "string" == var'はデバッグ時間を節約できます。 – maxenglander

+0

しかし、私はここで 'var =" string "'をします...あなたが何を意味するのかは分かりません。 – marcamillion

+0

Btw、私の場合、 'name.eql" string "'は動作しません。その条件に失敗し、正しい 'div'を出力しません。何が起こっているのか分かりません。 – marcamillion

答えて

6

あなたは平等をチェックしていない可能性がありますか?

ない平等

<% if name = "error" %> 

のチェック平等

<% if name == "error" %> 

のチェックまた、あなたが文字列をチェックしていることが考えられます。フラッシュハッシュは記号で示されます。

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

これでフラッシュメッセージが表示されなくなりました。 – marcamillion

+0

+1。私は 'case'ステートメントを追加する方が良いでしょう。 – apneadiving

+0

何が起きているのかで質問を更新しました。 – marcamillion

関連する問題