我已将我的可挂载引擎从 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 模块中。属性访问器模块。