使用事务轨道在同一个动作控制器中对多个db进行查询?

时间:2016-12-23 16:59:50

标签: mysql ruby-on-rails transactions database-connection multiple-databases

我在我的database.yml:

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

我需要在foo操作中进行许多查询,但使用这两个DB:

ActiveRecord::Base.transaction do
  begin
    yield
  rescue Exception => e
    raise ActiveRecord::Rollback
end

有效,但我将所有动作控制器封装在事务中,如:

ActiveRecord::Base.transaction do

有了这个,我之前的代码不起作用,它引发了一个错误:

  用户控制器中的

ActiveRecord :: StatementInvalid#foo NoMethodError:   未定义的方法`query&#39;为零:NilClass你的意思是? to_query:   ROLLBACK

错误行是: scanf("%d",&N); count=0; for(i=2;i<=N;i++) { c=a; while(c>=i) { c=c/i; } if(b==1) count++; } printf("%d\n",count);

那么我怎样才能在我的主要数据库同时在另一个数据库上进行连接和查询?

1 个答案:

答案 0 :(得分:0)

好的,我的问题是我不明白class ReadDatabaseConnection < ActiveRecord::Base def self.abstract_class? true # So it gets its own connection end end ReadDatabaseConnection.establish_connection(slave_settings) 会覆盖我的第一个连接和交易。

我创建了一个像这里所说的抽象类:https://makandracards.com/makandra/10169-when-connecting-to-a-second-database-take-care-not-to-overwrite-existing-connections

CSV.foreach('C:\Users\username\Desktop\Original.csv', :headers=>true, force_quotes: false, :quote_char => "\x00") do |row|
  p row
end

我保持这样的联系,没有pb!