Rails在API调用过滤之前跳过

时间:2015-12-11 15:37:43

标签: ruby-on-rails api skip before-filter

在进行API调用时,是否有任何方法可以跳过操作前的过滤器?

所以我通常希望在执行API调用时执行before_filter x除外。

skip_before_filter :x, :except => API CALL BEING MADE

3 个答案:

答案 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请求可以由单独的控制器处理(我确定存在差异)在您发送的回复中)。代码可能更清晰,控制器内部分支更少。您甚至可以让两个控制器继承“基本”控制器,该控制器执行常见查询以消除重复。

无论如何,exceptonly只能接受控制器操作的名称,因此在您的回调方法中,您可以考虑在request.headers["Content-Type"] == 'application/jsonrequest.xhr?

上进行分支