如何检查两个before_filters中的一个是否通过(Rails)? before_filter:check1 || before_filter:check2?

时间:2014-10-02 11:37:02

标签: ruby-on-rails ruby-on-rails-4 before-filter

我在application_controller.rb中有check_feature方法

  def self.check_feature(feature, options = {})
    before_filter(options) { |controller| controller.check_feature_now(feature) }
  end

  def check_feature_now(feature)
    raise MyError.new(401, I18n.t('exception.feature_not_enabled'), ErrorCodes::FEATURE_NOT_ENABLED) unless feature_enabled?(feature)
  end

我将其用作过滤器(before_filter)。

在我的控制器中,我想说些什么,比如能够访问控制器的两个功能中的至少一个。

如果我这样做:

check_feature :feature1
check_feature :feature2

我需要启用feature1 AND feature2来传递过滤器。

我想要类似的东西:

check_feature :feature1 || check_feature :feature2

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

创建一个能够识别多个功能的包装器。这些方面的东西:

def self.require_one_of(*features, options = {})
  before_filter(options) do |controller|
    unless features.any?{|f| controller.feature_enabled?(f)}
      raise MyError.new(401, I18n.t('exception.feature_not_enabled'), ErrorCodes::FEATURE_NOT_ENABLED)
    end

  end
end


# then
require_one_of :feature1, :feature2