部分的なフラッシュメッセージ(Rails 3) 質問する

部分的なフラッシュメッセージ(Rails 3) 質問する

私は部分的に、_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他のインスタンス変数と同様に、何の関係もありません。

おすすめ記事