我在我的database.yml中:
default: &default
[...]
development_1:
<<: *default
database: dev1
development_2:
<<: *default
database: dev2
我需要在foo操作中进行很多查询,但要使用以下两个DB:
class UsersController < ApplicationController
def foo
users_nb = User.count #this use my default db : dev1
other_connexion = ActiveRecord::Base.establish_connection("#{Rails.env}_2").connection
users_nb_other_site = connexion.execute("SELECT COUNT(*) FROM users").first[0]
end
end
工作正常,但我将所有动作控制器封装在事务中,例如:
ActiveRecord::Base.transaction do
begin
yield
rescue Exception => e
raise ActiveRecord::Rollback
end
与此有关,我之前的代码不起作用,它引发了一个错误:
UsersController#foo NoMethodError中的ActiveRecord :: StatementInvalid
nil:NilClass的未定义方法“查询”是什么意思? to_query:
回滚
错误行是:
ActiveRecord::Base.transaction do
那么,如何与我的主体数据库同时进行连接和查询另一个数据库?
最佳答案
好的,我的问题是我不理解ActiveRecord::Base.establish_connection
也会覆盖我的第一次连接和事务。
我创建一个抽象类,如这里所说:https://makandracards.com/makandra/10169-when-connecting-to-a-second-database-take-care-not-to-overwrite-existing-connections
class ReadDatabaseConnection < ActiveRecord::Base
def self.abstract_class?
true # So it gets its own connection
end
end
ReadDatabaseConnection.establish_connection(slave_settings)
我像这样保持我的2个连接,没有pb!
关于mysql - 在具有事务 rails 的同一 Action Controller 中对多个数据库进行查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41305212/