ActiveSupport的class_attribute未定义

时间:2016-05-13 13:51:06

标签: ruby

我很习惯使用Rails,但我想在框架之外学习更多关于Ruby的知识,并考虑为特定问题编写gem。我开始挑选一对夫妇(动态和mongoid)来遵循他们的模式。我在第一次倒下时会欢迎一些帮助。

我有一个看起来像这样的模块:

module MyModule
  module Document
    extend ActiveSupport::Concern
    include Components

    included do
      class_attribute :foo
    end
  end
end

这会导入另一个模块,它只是一个用于扩展的说服包

module MyModule
  module Components
    include Fields
  end
end

最后包含另一个看起来像这样的模块:

module MyModule
  module Fields
    extend ActiveSupport::Concern

    included do
      class_attribute :bar
    end
  end
end

这遵循其他宝石的模式。

class_attribute中的MyModule::Document来电正常,正如我所料。

我的问题是我在Fields模块中获得undefined method `class_attribute' for MyModule::Components:Module (NoMethodError)。现在,这似乎有意义,因为MyModule::Fields被包含在模块中,而不是类,并且模块没有class_attribute方法。我只是看不出这两个宝石是如何表现这种伎俩,或者是否有一个我不知道的成语?

1 个答案:

答案 0 :(得分:2)

您需要让您的班级MyModule::Document成为MyModule::Fields的包含者,而不是模块MyModule::Components。这会有用吗?

module MyModule
  module Components
    extend ActiveSupport::Concern
    included do
      include Fields
    end
  end
end