【发布时间】:2016-12-23 16:59:50
【问题描述】:
我的 database.yml 中有:
default: &default
[...]
development_1:
<<: *default
database: dev1
development_2:
<<: *default
database: dev2
我需要在 foo 操作中进行许多查询,但使用这 2 个数据库:
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
这样,我以前的代码不起作用,它会引发错误:
ActiveRecord::StatementInvalid in UsersController#foo NoMethodError: nil:NilClass 的未定义方法“查询”您是说什么? to_query: 回滚
错误行是:ActiveRecord::Base.transaction do
那么我该如何做才能在另一个数据库上与我的主数据库同时进行连接和查询呢?
【问题讨论】:
标签: mysql ruby-on-rails transactions database-connection multiple-databases