10

私はいくつかのコントローラーアクションに対してこのタイプのことをしています:

def my_method

  flash[:notice] = "Success."

  respond_to do |format|
    format.js { render 'common/flashes' }
  end

end

そして、それはうまく機能し、フラッシュアラートと通知は問題なく表示されます. しかし、ユーザーがクリックして別のページに移動すると、フラッシュ メッセージがもう一度表示されます。Rails は、私の扱い方のせいで、それらが使用されたことを認識していないようです。上記のレンダリングを実行した後、それらをクリアするにはどうすればよいですか?

4

4 に答える 4

13

application_controller.rbRahul の答えは、またはその他のコントローラーでより簡潔に次のように表現できます。

after_action -> { flash.discard }, if: -> { request.xhr? }

これはActionController、ラムダと条件付きフィルターの の処理を​​利用します。

于 2016-01-30T03:45:17.373 に答える
6

あなたのapplication_controller.rbで

after_filter :clear_xhr_flash


def clear_xhr_flash
  if request.xhr?
    # Also modify 'flash' to other attributes which you use in your common/flashes for js
    flash.discard
  end
end
于 2013-03-18T17:26:57.000 に答える
5

すべてのフラッシュをクリーニングするflash.clearには、代わりに使用しますflash.discard

https://api.rubyonrails.org/v5.1.7/classes/ActionDispatch/Flash/FlashHash.html#method-i-clear

于 2020-11-20T13:34:21.450 に答える