要有条件地跳过before_filter
,我在https://stackoverflow.com/a/21755636/1348146使用了Rafa Paez的建议解决方案
我的ApplicationController包含以下方法:
def self.skip_authentication_if_json_request_for(*actions)
skip_before_filter :authenticate_user!
can_skip_authentication_check = lambda do
request.format.json? && actions.include?(params[:action].to_sym)
end
before_filter :authenticate_user!, unless: can_skip_authentication_check
end
子控制器然后通过包括:
指定可以跳过某些操作的用户身份验证 skip_authentication_if_json_request_for :index
我对这种方法非常满意,因为对于每个子控制器来说它是DRY和非常易读的单行,但我的主要问题是修改了before_filter
的顺序。有了这个单行,订单是:
[:filter-a, :filter-b, filter-c, :authenticate_user!]
但没有,authenticate-user!
的位置不同:
[:filter-a, :authenticate_user!, :filter-b, :filter-c]
如何确保在原始位置插入修改后的before-filter :authenticate-user!
?