.preload使用两个数据库

时间:2012-03-18 11:05:24

标签: ruby-on-rails ruby-on-rails-3 eager-loading preload

My Rails 3.2 app使用两个不同的数据库。主os是MySQL,而oher是sqlserver DB:

development:
    adapter: mysql2
    encoding: utf8
    database: mydb
    username: myuser
    password: ***
secondbase:
    adapter: sqlserver
    database: anotherbase
    username: anotheruser
    password: ***

我有两个相关的模型:

class Account < ActiveRecord::Base
    establish_connection :secondbase
    has_many :docs
end

class Docs < ActiveRecord::Base
    belongs_to :account
end

由于两个模型在两个不同数据库上使用表,我想我不能使用eager_loading并使用joinincludes

加载相关数据

但我认为preload仍然允许我使用两个查询(而不是N + 1)加载数据

但是,在我的控制器中尝试使用preload时,会引发错误:

Docs.where(someconditions).preload(:account)

返回

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USE [anotherbase]

如果在我的视图中使用帐户详细信息显示文档,我该如何预加载帐户数据并避免N + 1次查询?

1 个答案:

答案 0 :(得分:0)

你看过Apartment gem:https://github.com/bradrobertson/apartment吗?

它为您提供了处理多个数据库的方法。