在进行API调用时,是否有任何方法可以跳过操作前的过滤器?
所以我通常希望在执行API调用时执行before_filter x除外。
skip_before_filter :x, :except => API CALL BEING MADE
答案 0 :(得分:2)
这取决于您如何定义API调用。如果它具有JSON格式的任何请求,您可以执行以下操作:
skip_before_action :x if: -> { request.format.json? }
虽然这似乎不是一个理想的解决方案,但为Web和API制作单独的控制器可能更好。你可以沿着这些方向做点什么:
class APIController < ApplicationController
# API-specific filters
end
class SomeOtherController < APIController
# your API actions
end
您也可以为网络执行相同的操作,然后配置路由以将请求发送到正确的控制器操作。
希望有所帮助。
答案 1 :(得分:1)
在您的控制器中,您可以添加
skip_before_action :x, only: WHEN API CALL BEING MADE
我想,您需要only
而不是except
答案 2 :(得分:1)
这不是您问题的直接答案,但您希望API和Web请求的不同行为可能会让您的API请求可以由单独的控制器处理(我确定存在差异)在您发送的回复中)。代码可能更清晰,控制器内部分支更少。您甚至可以让两个控制器继承“基本”控制器,该控制器执行常见查询以消除重复。
无论如何,except
和only
只能接受控制器操作的名称,因此在您的回调方法中,您可以考虑在request.headers["Content-Type"] == 'application/json
或request.xhr?