0

我在我的项目中使用table_name_prefix时遇到问题。我的项目中有一个主要应用程序,它有其他应用程序作为插件,这些插件就像主应用程序的子系统一样工作。

为了组织子系统数据库上的表,我想使用ActiveRecord插件的table_name_prefix 。

如果我把插件的init.rb命令config.active_record.table_name_prefix = "per_"主应用程序将无法工作,因为 ActiveRecord 将尝试查找 "per_users" 但我唯一想要的是只有我的插件主应用程序使用前缀“per_”。

我尝试使用上面的命令在我的插件中创建一个 rails 文件夹,但发生了同样的问题,所有应用程序都试图查找前缀表名。

另一种方法是在插件模型中使用set_table_name,但这对我不利,因为我将子系统开发为 rails 插件,并且在将子系统放在主应用程序时我不想更改模型。

有人可以帮助我吗?

4

2 回答 2

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 文档中的更多信息在这里

于 2012-01-04T00:37:18.533 回答
0

看看这个问题。我遇到了同样的问题,忘记了我的应用程序的名称(主模块)与我的模型的命名空间具有相同的名称。

于 2013-12-03T19:07:21.507 回答