AKW*_*KWF 5 ruby-on-rails rails-flash ruby-on-rails-3 ruby-on-rails-3.2
我正在为某些控制器操作执行此类操作:
def my_method
flash[:notice] = "Success."
respond_to do |format|
format.js { render 'common/flashes' }
end
end
Run Code Online (Sandbox Code Playgroud)
而且效果很好,并且闪光警报和通知显示得很好。但是,当用户单击以转到另一页时,该Flash消息将再次显示。由于我处理它们的方式,Rails显然不知道使用了它们。完成上面的渲染后,如何清除它们?
小智 14
要清洁所有闪光灯,请flash.clear
使用flash.discard
https://api.rubyonrails.org/v5.1.7/classes/ActionDispatch/Flash/FlashHash.html#method-i-clear
Rahul的答案可以更简洁地表达application_controller.rb
为:
after_filter -> { flash.discard }, if: -> { request.xhr? }
Run Code Online (Sandbox Code Playgroud)
这利用了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
Run Code Online (Sandbox Code Playgroud)