0

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

4

1 回答 1

0

你不能在 a 上调​​用方法,Module除非你已经includedextended它们在一个类中,如果在你的控制台中你这样做

extend DynaState::AttributeAccessors

接着

DynaState::AttributeAccessors.table_name_prefix

那很可能会为您做到。我真的不确定,但在控制台中动态定义的模块可能可用/包含在main控制台上下文的范围内。

于 2013-09-26T21:11:43.490 回答