导轨4中的多个数据库连接

时间:2015-02-12 18:34:48

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

我在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中尝试相同的代码时,根本没有问题,一切都很好。你们之前有没有遇到过类似的问题?请帮忙。

1 个答案:

答案 0 :(得分:2)

我相信您需要从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