将模型移动到rails引擎后,我遇到了问题。它现在在引擎下被命名空间,但我收到一个错误,即“表不存在”。是否需要清除某种ActiveRecord缓存?
以前的文件是
.
└── _app
└── _models
└── _foo.rb
它看起来像这样
class Foo < ActiveRecord::Base
belongs_to :bar
end
和
> Foo
=> Foo(id: integer, bar_id: integer)
我把它移到了
.
└── _components
└── _my_engine
└── _app
└── _models
└── _my_engine
└── _foo.rb
现在看起来像这样:
module MyEngine
class Foo < ActiveRecord::Base
belongs_to :bar
end
end
现在:
> MyEngine::Foo
=> MyEngine::Foo(Table doesn't exist)
> Foo
=> NameError: uninitialized constant Foo
我的structure.rb看起来像这样:
CREATE TABLE foos (
id integer NOT NULL,
bar_id integer
);
为什么不再识别这张桌子?
答案 0 :(得分:3)
添加以下文件:
# app/models/my_engine.rb
module MyEngine
def self.table_name_prefix
'my_engine_'
end
end
确保您的表名称遵循约定。
# db/migrate/timestamp_rename_foo_to_my_engine_foos.rb
def change
rename_table :foos, :my_engine_foos
end
答案 1 :(得分:-1)
在这里,尝试使用此类名称。
module MyEngine
class Foo < ActiveRecord::Base
belongs_to :bar , class_name: "::#{Rails.application.class.parent_name}::Foo"
end
end
答案 2 :(得分:-1)
我发现Rails现在也希望表名也是名称空间。所以我把我的课程看起来像这样:
module MyEngine
class Foo < ActiveRecord::Base
self.table_name = 'foos'
self.primary_key = 'id'
belongs_to :bar
end
end
..而且效果很好。