10

我正在为我的一些控制器操作做这种事情:

def my_method

  flash[:notice] = "Success."

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

end

它工作得很好,并且闪光警报和通知显示得很好。但是当用户点击转到另一个页面时,flash 消息会再显示一次。由于我处理它们的方式,Rails 显然不知道它们已被使用。完成上述渲染后如何清除它们?

4

4 回答 4

13

Rahul 的回答可以更简洁地表达为application_controller.rb或任何其他控制器:

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

这利用了ActionController对 lambda 和条件过滤器的处理。

于 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 回答
6

在 Rails 5.2 上,这些答案都不适合我。打电话后,flash.discard我仍然有一条消息。相反,我不得不打电话flash[:notice] = nil

于 2019-05-02T17:40:25.653 回答
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 回答