【问题标题】:Rails 3.0 Models in two different db's causing table does not exist error in view两个不同数据库中的Rails 3.0模型导致表中不存在错误
【发布时间】:2012-08-28 08:04:21
【问题描述】:

在我的 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

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

Table 'myapp_development.categories' doesn't exist

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

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案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
    

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

    【讨论】:

    • 感谢您的回复。在我的 database.yml 文件中,我的所有数据库都嵌套在一个开发命名空间下。我不确定为什么这在控制台中不是问题,但在我看来似乎正在影响事情。像在 yaml 文件中那样将它们单独移出就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2013-03-24
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多