2015-12-11 109 views
3

有没有什么办法可以在进行API调用时跳过之前的过滤器?Rails在API调用过滤前跳过

所以一般我希望before_filter x被执行除了当我正在做一个API调用。

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

回答

2

在你的控制器,你可以添加

skip_before_action :x, only: WHEN API CALL BEING MADE 

我猜,你会想only而不是except

+0

你是对的 - 我的部分马虎的错误。但真正的问题是,除了 – RuneScape

+0

之外,您需要放置处理API调用的操作的名称。看看[链接](http://stackoverflow.com/questions/27204055/rails-skip-before-action-doesnt-work),它有一个类似的问题 –

+0

我希望它为API – RuneScape

2

这不是直接回答你的问题,但事实上,你想要API和Web请求的不同行为可能会产生一种异味,即您的API请求可能由单独的控制器处理(我确信您发送的响应也存在差异)。代码可能会更干净,分支内部控制器较少。你甚至可以让两个控制器都从一个“基本”控制器继承,这个控制器执行常见的查询来消除重复。

反正exceptonly只能接受控制器动作的名称,因此在回调方法,你可以考虑分支上request.headers["Content-Type"] == 'application/jsonrequest.xhr?

3

这取决于你如何定义一个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 

而且你会做网站一样,然后配置你的路由采取请求到正确的控制器动作。

希望有所帮助。

+0

谢谢你的罗马! – RuneScape