2

Rails flash[:notice] ="msg" が機能するのに、:notice => "msg" が機能しないのはなぜですか? 次のコードを使用すると、通知が表示されます。

# Case 1 (this works)
flash[:notice] = 'Candidate was successfully registered.'
format.html { redirect_to :action => "show_matches", :id => @trial.id }

これは動作しません:

# Case 2 (this doesn't)
format.html { redirect_to :action => "show_matches", :id => @trial.id, :notice => "Candidate was successfully registered."}

しかし、私のアプリケーションの他の領域では、上記の手法は問題なく機能します。

# Case 3 (this works)
format.html { redirect_to @candidate, :notice => 'Candidate was successfully created.' }

私のレイアウトは次のとおりです。

<section id="middle_content">
    <% flash.each do |key, value| -%>
        <div id="info_messages" class="flash <%= key %>"><%= value %></div>
        <br/>
    <% end -%>
    <%= yield -%>
</section>

だから私の質問は、なぜ一方のケースでは使用が:notice => ""機能するのに、もう一方のケースでは機能しないのですか?

あまり文脈を説明していないことは承知していますが、私の感覚では、私の問題は実際には非常に単純です。

ps これはこの質問に似ているようです。

4

1 に答える 1

4

ドキュメントによると、 redirect_to メソッドは 2 つの引数を取ります。

2 番目の引数は、:noticeキーを配置する場所です。

ただし、ケース 2 では、ルビーは 1 つ以上のハッシュが含まれているかどうかを判断できません。redirect_to メソッドに渡されると見なされるハッシュは 1 つだけです。

各ハッシュを明示的に括弧で囲むことにより、Ruby に 2 番目のハッシュを渡すように強制できます。

format.html { redirect_to({:action => "show_matches", :id => @trial.id}, {:notice => "Candidate was successfully registered."}) }

ケース 3 は、あいまいなハッシュ状況がないため機能します。

于 2013-02-01T00:28:28.677 に答える