如果且仅当请求是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
答案 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
采用名为*klasses
和block
的splat参数。然后它解析*klasses
以确定传入的选项,它只关注:with
。然后它将:with
块应用于将代表要处理的异常类名称的键。
没有其他选项可以确认。
请注意,我没有测试过这个
答案 1 :(得分:0)
你可以这样做:
rescue_from ActiveRecord::RecordNotFound do
record_not_found if json_request?
end
我认为这种确切情况还有另一种语法: - (