【问题标题】:Multiple database connection in rails 4Rails 4中的多个数据库连接
【发布时间】:2015-02-12 18:34:48
【问题描述】:

我在 Rails 4 应用程序中实现多个数据库连接时遇到了麻烦。除了主数据库连接,我还通过在 database.yml 中指定详细信息创建了辅助连接。

secondary_base:
 adapter: postgresql
 encoding: unicode
 host: localhost
 database: secondary_db
 pool: 5
 username: postgres
 password: postgres

然后创建了一个名为SecondaryBase 的模型,它保存与该辅助数据库的连接。代码如下:

secondary_base.rb

class SecondaryBase < ActiveRecord::Base
  self.abstract_class = true
  establish_connection "secondary_base"
end

然后添加了两个模型MemberSubdomain

member.rb

class Member < SecondaryBase
  has_and_belongs_to_many :subdomains
end

subdomain.rb

class Subdomain < SecondaryBase
  has_and_belongs_to_many :members
end

现在您可以看到MemberSubdomain 模型通过has_and_belongs_to_many 关系相关联。因此,当我尝试将数据插入名为members_subdomains 的连接表时,它现在正在工作并给我类似PG: Undefined table 的错误,尽管该表在secondary_db 数据库中退出。我的理解是rails试图在主数据库中找到members_subdomains表。但是当我在Rails 3.2.13中尝试相同的代码时,完全没有问题,一切都很好。你们中有人处理过类似的问题吗?请帮忙。

【问题讨论】:

  • afact,这似乎是 Rails 4.1 中的一个重大变化。我刚刚在这种情况下升级了一个应用程序并遇到了同样的问题。你知道rails github上有什么问题吗?
  • @MikeCampbell 当时我在 github 或其他网站上没有找到任何有用的资源。
  • 好的,谢谢你告诉我:)

标签: ruby-on-rails database ruby-on-rails-3 postgresql ruby-on-rails-4


【解决方案1】:

我相信您需要从 has_and_belongs_to_many 切换到 has_many :through 才能使其正常工作。为此,只需为连接表创建一个模型——我将其命名为“MemberSubdomain”。

class SecondaryBase < ActiveRecord::Base
  self.abstract_class = true
  establish_connection "secondary_base"
end

class MemberSubdomain < SecondaryBase
  self.table_name = 'members_subdomains'
end

class Member < SecondaryBase
  has_many :member_subdomains
  has_many :subdomains, :through => :member_subdomains, :source => :subdomain
end

class Subdomain < SecondaryBase
  has_many :member_subdomains
  has_many :members, :through => :member_subdomains, :source => :member
end

【讨论】:

  • 那么has_and_belongs_to_many的实际问题是什么?
  • 问题在于它与模型没有关联,因此无法告诉它要连接到哪个数据库。
猜你喜欢
  • 2011-01-08
  • 1970-01-01
  • 2014-05-26
  • 2014-09-14
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多