当且仅当请求是 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
我假设如果请求不是 JSON
那么你想提出吗?如果是这样,你应该能够做到这一点
rescue_from ActiveRecord::RecordNotFound { request.format.json? ? record_not_found : super }
或
rescue_from ActiveRecord::RecordNotFound, with: lambda{|e| request.format.json? ? record_not_found(e) : raise(e) }
这些将产生相同的影响,因为如果给定一个 block ,它会将它分配给 options[:with]
,就像提供了 with:
一样,它使用它作为 block 并忽略传递给它的任何其他 block
rescue_from
采用一个名为 *klasses
的 splat 参数和一个 block
。然后它解析 *klasses
以确定传入的选项,它只关心 :with
。然后它将 :with
block 应用于将表示要处理的异常类名称的键。
没有将被确认的附加选项。
请注意我还没有测试过这个
我是一名优秀的程序员,十分优秀!