我很习惯使用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
方法。我只是看不出这两个宝石是如何表现这种伎俩,或者是否有一个我不知道的成语?
答案 0 :(得分:2)
您需要让您的班级MyModule::Document
成为MyModule::Fields
的包含者,而不是模块MyModule::Components
。这会有用吗?
module MyModule
module Components
extend ActiveSupport::Concern
included do
include Fields
end
end
end