我在我的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/

10-12 00:02
查看更多