0

在我的 Rails 3.0 应用程序中,我有两个模型,概念和类别。概念具有映射到类别的 category_id 字段。由于各种原因,这些模型必须存储在两个不同的数据库中,这两个数据库都不同于我的主应用程序数据库:

class Concept < ActiveRecord::Base
  establish_connection configurations[Rails.env]["db1"]
  set_table_name "concepts"
end

class Category < ActiveRecord::Base
  establish_connection configurations[Rails.env]["db2"]
  set_table_name "categories"
end

为了获得一个概念的类别,我的概念模型中有一个方法,如下所示:

在 app/models/concept.rb 中:

  def category
    Category.find_by_id(category_id)
  end

在他们的 rails 控制台中,这可以正常工作。但是,如果我尝试在概念展示页面上执行 @concept.category,则会收到以下错误:

Table 'myapp_development.categories' doesn't exist

知道是什么原因造成的吗?

4

1 回答 1

1

有趣的问题。以前从未尝试过。

set_table_name如果模型名称是表名称的单数,则不需要,就像您的一样。

如果您在 database.yml 中设置数据库连接,就像您通常做的那样,传递连接名称,如下所示。

您确实忘记添加关联,这就是您遇到异常的原因。

刚刚测试过:

# config/database.yml
db1:
  adapter: mysql2
  database: db1
  username: username
  password: password

db2:
  adapter: mysql2
  database: db2
  username: some_other_username
  password: some_other_password

# models/concept.rb
class Concept < ActiveRecord::Base
  establish_connection :db1
  belongs_to :category
end

# models/category.rb
class Category < ActiveRecord::Base
  establish_connection :db2
  has_one :concept
end

它的行为就好像它是一个单一的数据库。

于 2012-08-28T00:04:21.163 回答