我在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
然后添加了两个模型Member
和Subdomain
。
member.rb
class Member < SecondaryBase
has_and_belongs_to_many :subdomains
end
subdomain.rb
class Subdomain < SecondaryBase
has_and_belongs_to_many :members
end
现在您可以看到Member
和Subdomain
模型与has_and_belongs_to_many
关系相关联。因此,当我尝试将数据插入名为members_subdomains
的连接表时,它现在正在工作并向我提供类似PG: Undefined table
的错误,尽管该表退出secondary_db
数据库。据我所知,rails试图在主数据库中找到members_subdomains
表。但是当我在Rails 3.2.13中尝试相同的代码时,根本没有问题,一切都很好。你们之前有没有遇到过类似的问题?请帮忙。
答案 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