2012-03-18 1 views
3

Приложение My Rails 3.2 использует две разные базы данных. Основной ОСОМ является MySQL, а Прочая принадлежностей является SQLServer DB:.preload с использованием двух баз данных

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 и нагрузки, связанные с данными join или includes

Но я думаю, что 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 запросов, когда dusplaying Документы с некоторыми Учет Подробности на моих взглядах?

+0

Ум ... ну, это не обязательно то, что Rails предназначено для этого. Конечно, это возможно, но, скорее всего, для того, чтобы использовать магию AR, вы хотите, чтобы это выглядело так, как только вы попадаете в Rails. Проверьте, есть ли там драгоценные камни, которые предназначены для этого. Вот более старый поток на SO с хорошими ссылками: http://stackoverflow.com/questions/1825844/multiple-databases-in-rails –

+0

Я знаю, что Rails не предназначен для обработки нескольких баз данных. Использование 'creation_connection', когда требуется в моих моделях, достаточно для большинства моих потребностей. Я просто хотел бы улучшить производительность, используя энергичную/предварительную загрузку. – LapinLove404

ответ