私は部分的に、_flash.html.haml
- flash.each do |type, value|
.flash{ :class => type.to_s }
= value
私はビューからレンダリングしています
=render :partial => "flash"
これは、フラッシュ ハッシュが nil/undefined であるとエラーを出力します。ただし、次のようにすると:
=render :partial => "flash", :locals => {:flash => flash}
それは動作します。
なぜ部分的にフラッシュ メッセージにアクセスできないのですか?
ベストアンサー1
以前のバージョンの Rails (Rails 2) では、デフォルトのローカル変数は、親の部分と同じ名前のインスタンス変数を検索していました。
あなたの例では、partial に名前が付けられているため、_flash
インスタンス変数 flash が partial のローカルとして自動的に渡されます。したがって、それにアクセスできるようになります。この動作は 2.3 で非推奨となり、Rails 3.0 で削除されました。
つまり、後者の例で書いたように、すべてのインスタンス変数をlocals
、さらには として明示的に渡す必要があるということです。flash
<%= render :partial => "flash", :locals => {:flash => flash} %>
flash
これは、flash
他のインスタンス変数と同様に、何の関係もありません。