【问题标题】:Rails 3 Plugin - Active Record table_name_prefixRails 3 插件 - Active Record 表名前缀
【发布时间】:2011-08-10 13:40:11
【问题描述】:

在我的项目中使用 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 插件,并且我不想在将子系统放在主要位置时更改模型应用。

有人可以帮助我吗?

【问题讨论】:

  • 你用的是什么版本的rails?

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


【解决方案1】:

要让每个插件都有自己的前缀,对于 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中的更多信息

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多