Rails 3插件 - 活动记录table_name_prefix

时间:2011-08-10 13:40:12

标签: ruby-on-rails activerecord plugins prefix tablename

我在项目中使用 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插件而我不想在将子系统放在主要部分时更改模型应用

有人可以帮助我吗?

2 个答案:

答案 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。我遇到了同样的问题,忘记了我的应用程序的名称(主模块)与我的模型的命名空间同名。