我在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
有什么想法吗?
答案 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