我正在为我的一些控制器操作做这种事情:
def my_method
flash[:notice] = "Success."
respond_to do |format|
format.js { render 'common/flashes' }
end
end
它工作得很好,并且闪光警报和通知显示得很好。但是当用户点击转到另一个页面时,flash 消息会再显示一次。由于我处理它们的方式,Rails 显然不知道它们已被使用。完成上述渲染后如何清除它们?
我正在为我的一些控制器操作做这种事情:
def my_method
flash[:notice] = "Success."
respond_to do |format|
format.js { render 'common/flashes' }
end
end
它工作得很好,并且闪光警报和通知显示得很好。但是当用户点击转到另一个页面时,flash 消息会再显示一次。由于我处理它们的方式,Rails 显然不知道它们已被使用。完成上述渲染后如何清除它们?
Rahul 的回答可以更简洁地表达为application_controller.rb
或任何其他控制器:
after_action -> { flash.discard }, if: -> { request.xhr? }
这利用了ActionController
对 lambda 和条件过滤器的处理。
在你的 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
在 Rails 5.2 上,这些答案都不适合我。打电话后,flash.discard
我仍然有一条消息。相反,我不得不打电话flash[:notice] = nil
用于清洁所有闪光灯flash.clear
,而不是flash.discard
https://api.rubyonrails.org/v5.1.7/classes/ActionDispatch/Flash/FlashHash.html#method-i-clear