我正在使用一个使用flip gem功能标记的Rails项目。我们有一个Feature类,您可以在其中声明要使用的各种功能标志,
# app/models/feature.rb
class Feature < ActiveRecord::Base
extend Flip::Declarable
strategy Flip::DeclarationStrategy
feature :ivans_feature_A
feature :ivans_feature_B
feature :ivans_feature_C
feature :kramers_feature_X
feature :kramers_feature_X
end
随着项目的增长,我们在此文件中声明的功能标志数量也在增加。同事建议我们将相关的功能声明分解为单独的模块以组织事物。
我找到了一种方法来做到这一点,但这不是我以前见过的模式,所以我想知道是否有更标准的方法。我为每组想要组合在一起的功能定义了命名空间模块:
应用程序/型号/功能/ ivans_features.rb
module Features::IvansFeatures
def self.included(base)
base.feature :ivans_feature_A
base.feature :ivans_feature_B
base.feature :ivans_feature_C
end
end
应用程序/型号/功能/ kramers_features.rb
module Features::KramersFeatures
def self.included(base)
base.feature :kramers_feature_X
base.feature :kramers_feature_Y
end
end
...并将它们包含在要素模型中:
# app/models/feature.rb
class Feature < ActiveRecord::Base
extend Flip::Declarable
strategy Flip::DeclarationStrategy
include Features::IvansFeatures
include Features::KramersFeatures
end
将模块混合到一个类中是否很奇怪,其唯一目的是使用included
回调在类上运行某些方法调用?
答案 0 :(得分:1)
在Feature
课程中,您可以extend ActiveSupport::Concern
然后执行类似
included do
feature :kramers_feature_X
end