Ruby on rails rails 4中的多数据库连接
在Rails 4应用程序中实现多个数据库连接时,我遇到了一个问题。除了主数据库连接之外,我还通过在Ruby on rails rails 4中的多数据库连接,ruby-on-rails,database,ruby-on-rails-3,postgresql,ruby-on-rails-4,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的模型,该
database.yml
中指定详细信息创建了辅助连接
secondary_base:
adapter: postgresql
encoding: unicode
host: localhost
database: secondary_db
pool: 5
username: postgres
password: postgres
然后创建了一个名为SecondaryBase
的模型,该模型保持与该辅助数据库的连接。代码如下:
次级基础.rb
class SecondaryBase < ActiveRecord::Base
self.abstract_class = true
establish_connection "secondary_base"
end
class Member < SecondaryBase
has_and_belongs_to_many :subdomains
end
class Subdomain < SecondaryBase
has_and_belongs_to_many :members
end
子域.rb
class SecondaryBase < ActiveRecord::Base
self.abstract_class = true
establish_connection "secondary_base"
end
class Member < SecondaryBase
has_and_belongs_to_many :subdomains
end
class Subdomain < SecondaryBase
has_and_belongs_to_many :members
end
类子域
现在您可以看到,
成员
和子域
模型通过has\u和\u属于\u多个
关系进行关联。因此,当我试图向名为members\u subdomains
的联接表插入数据时,它现在起作用,并给出类似PG:Undefined table
的错误,尽管该表存在于secondary\u db
数据库中。据我所知,rails正在尝试在主数据库中查找members\u子域
表。但当我在rails 3.2.13中尝试相同的代码时,根本没有问题,一切都很好。你们中有人曾经处理过类似的问题吗?请提供帮助。我相信您需要从has\u和\u归属\u many
切换到has\u 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
class SecondaryBase:成员\子域,:源=>:子域
结束
类子域:member\u子域,:source=>:member
结束
那么的实际问题是什么呢?它与模型没有关联,因此无法告诉它要连接到哪个数据库。afaict,这似乎是Rails 4.1中一个突破性的变化。我刚刚用这个场景升级了一个应用程序,遇到了同样的问题。你知道rails github有什么问题吗?@MikeCampbell当时我在github或其他网站上没有找到任何有用的资源。好的,谢谢你让我知道:)