如果JSON拯救

时间:2014-10-23 17:48:56

标签: ruby-on-rails ruby json rescue

如果且仅当请求是JSON时,我想从RecordNotFound异常中解救。现在,如果我为skip_before_action执行此操作,我会执行以下操作:

skip_before_action :verify_authenticity_token, if: :json_request?

rescue_from中是否有这种语法?类似的东西:

rescue_from ActiveRecord::RecordNotFound, :with => :record_not_found, if: :json_request?

帮助方法:

protected
  def json_request?
    request.format.json?
  end

2 个答案:

答案 0 :(得分:4)

我假设如果请求不是JSON那么你想要加注?如果是这样,你应该能够做到这一点

rescue_from ActiveRecord::RecordNotFound { request.format.json? ? record_not_found : super }

OR

rescue_from ActiveRecord::RecordNotFound, with: lambda{|e| request.format.json? ? record_not_found(e) : raise(e) }

这些会产生相同的影响,因为如果给出一个块,它会将它分配给options[:with],就好像提供with:一样,它使用它作为块并忽略传递给它的任何其他块

rescue_from采用名为*klassesblock的splat参数。然后它解析*klasses以确定传入的选项,它只关注:with。然后它将:with块应用于将代表要处理的异常类名称的键。

没有其他选项可以确认。

请注意,我没有测试过这个

答案 1 :(得分:0)

你可以这样做:

rescue_from ActiveRecord::RecordNotFound do
  record_not_found if json_request?
end

我认为这种确切情况还有另一种语法: - (