响应Ajax请求后如何清除Rails闪存对象?

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显然不知道使用了它们。完成上面的渲染后,如何清除它们?

Mik*_*ema 7

Rahul的答案可以更简洁地表达application_controller.rb为:

after_filter -> { flash.discard }, if: -> { request.xhr? }
Run Code Online (Sandbox Code Playgroud)

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

  • Rails 5.1上的after_action (2认同)

Rah*_*arg 5

在您的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)


sta*_*her 5

这些答案都不适用于 Rails 5.2。打完电话后,flash.discard我仍然有一个闪信。相反,我不得不打电话flash[:notice] = nil