2011-09-23 16 views
5
<%# Flash-based notifications %> 
<% if flash[:error].present? or flash[:notice].present? %> 
    <div class="messages <%= flash[:error] ? 'error' : 'notice' %>"> 
    <ul id="feedback"> 
     <% if flash[:error].present? %> 
     <li><%= flash[:error] %></li> 
     <% end %> 
     <% if flash[:notice].present? %> 
     <li><%= flash[:notice] %></li> 
     <% end %> 
    </ul> 
    </div> 
<% end %> 

何らかの理由で、単純なように、フラッシュがnilに設定されているため、部分的にフラッシュから読み取る試みがこのエラーを引き起こしています。手動で初期化する必要がありますか?Railsのセッションフラッシュを使用しようとしましたが、nil。[]エラーが発生しましたか?

これはRails 3.1.0です。このエラーは、コードスニペットの2行目で、flash[:error]にアクセスしようとしています。

私は何かが欠けているはずです。私は間違いなくどこでもそれを上書きしていません。

答えて

10

ここで重要なのは、あなたが部分的にフラッシュにアクセスしようとしていることです。

render YOUR_PARTIAL, :flash => flash 

http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables

EDIT:

簡単ソリューション:何もあなたの部分の名前を変更するあなたは、部分的に通過フラッシュハッシュを渡すためにあなたのrenderメソッドで次の操作を行う必要があります_flash。あなたの部分は、フラッシュと呼ばれていたので

は、これが起こった:

すべての部分は、部分的(マイナスアンダースコア)と同じ名前のローカル変数を持っています。 :objectオプションを使用して、このローカル変数にオブジェクトを渡すことができます。

フラッシュオブジェクトは、パーシャルの名前で作成されたローカル変数によって上書きされていました。

#_comment.html.erb 
<h1>comment.user.name</h1> 
<p>comment.body</p> 

あなたが線に沿って何かをすることによって、これは部分的に呼び出します。あなたのような何かを行うことができ、あなたがコメントモデルを持っていて、部分的にコメントをレンダリングするとしましょう、これを少し明確にする

of:

render @customer 

ここでcustomerという文字をflashと置き換えると、これが問題であった理由がわかります。

通常はの機能がこの問題の原因です。

+0

私はビューヘルパーが私の部分にアクセスできたと思いましたか?すべての私のアプリケーションヘルパーは確かにあります。私はこれを行かせます、ありがとう。 – d11wtq

+0

実際には、そのリンクを読んだ後に、あなたの部分は_flashですか?もしそうなら、文字通り何かに名前を変更し、それが動作するかどうか確認してください。 – Gazler

+0

それは確かにそれを修正します。私はフラッシュがどこから来るのか完全に理解していないと思う。ミドルウェアを見ると、それはリクエストのメソッドです。ビューにアクセスできるので、ビューヘルパーとして公開されていると仮定しました:) – d11wtq

関連する問題