我已经将我的可安装引擎从Ruby 1.9.3 / Rails 3.2更新到Ruby 2.0.0 / Rails 4.现在我的命名空间模型出现了一个奇怪的问题。它找不到正确的表名。我认为这是因为父模块上的tabele_name_prefix方法存在问题。它无法找到。
module DynaState::AttributeAccessors
def self.table_name_prefix
'dyna_state_attribute_accessors_'
end
def self.foo
'bar'
end
end
如果我在rails控制台中测试它:
2.0.0p0 :004 > DynaState::AttributeAccessors.table_name_prefix
NoMethodError: undefined method `table_name_prefix' for DynaState::AttributeAccessors:Module
2.0.0p0 :005 > DynaState::AttributeAccessors.foo
NoMethodError: undefined method `foo' for DynaState::AttributeAccessors:Module
然而,当我在控制台中动态定义它时:
2.0.0p0 :002 > module Foo; def self.bar; 'argh!' end; end;
2.0.0p0 :003 > Foo.bar
=> "argh!"
我的猜测是,在初始化期间,它没有评估组成模块的所有文件。特别是不是定义方法的文件。但我不知道如何解决它或者甚至是问题。
你有什么想法我可以调试这个或问题是什么?
编辑:只有ONE模块才会出现此问题。 AttributeAccessors模块。
答案 0 :(得分:0)
如果您在课程中Module
或included
,则无法在extended
上调用方法,如果在您的控制台中,则
extend DynaState::AttributeAccessors
然后
DynaState::AttributeAccessors.table_name_prefix
这应该最适合你。我真的不确定,但是在控制台中动态定义的模块可能在控制台上下文的main
范围内可用/包含。