我在项目中使用 table_name_prefix 时遇到问题。我的项目中有一个主应用程序,其他应用程序作为插件,这些插件就像主应用程序中的子系统一样。
要组织子系统数据库上的表,我想使用 ActiveRecord 插件的 table_name_prefix 。
如果我将插件 config.active_record.table_name_prefix =“per _”置于 init.rb ,主应用程序将无法运行,因为ActiveRecord将尝试查找对于“per_users”,但我唯一想要的是只有我的主应用程序上的插件使用前缀“per _”。
我尝试使用上面的命令在我的插件中创建一个rails文件夹但是出现同样的问题,所有应用程序都试图找到前缀表名。
另一种方法是在插件模型中使用 set_table_name ,但它对我不利,因为我将子系统开发为rails插件而我不想在将子系统放在主要部分时更改模型应用
有人可以帮助我吗?
答案 0 :(得分:3)
要让每个插件都有自己的前缀,对于Rails 3,尝试在命名空间中的插件中组织你的模型:
class Foo::Bar < ActiveRecord::Base
...
end
module Foo
def self.table_name_prefix
'foo_'
end
end
这将在插件内部工作,而不会更改主应用程序内的任何内容。 其他方法是使用一些主要模型并从其他类似的继承它:
class Foo < ActiveRecord::Base
def self.table_name_prefix
'foo_'
end
end
class Bar < Foo
...
end
有时这种方法用于扩展所有具有额外功能的模型。
Rails文档here
中的更多信息答案 1 :(得分:0)
看看this question。我遇到了同样的问题,忘记了我的应用程序的名称(主模块)与我的模型的命名空间同名。