有条件地skip_before_filter,同时保留过滤顺序

时间:2015-04-19 12:14:17

标签: ruby-on-rails before-filter

要有条件地跳过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!

0 个答案:

没有答案