Rails 4引擎:未找到模块的本征类的方法

时间:2013-09-26 20:58:47

标签: ruby ruby-on-rails-4

我已经将我的可安装引擎从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模块。

1 个答案:

答案 0 :(得分:0)

如果您在课程中Moduleincluded,则无法在extended上调用方法,如果在您的控制台中,则

extend DynaState::AttributeAccessors

然后

DynaState::AttributeAccessors.table_name_prefix

这应该最适合你。我真的不确定,但是在控制台中动态定义的模块可能在控制台上下文的main范围内可用/包含。