.preload с использованием двух баз данных - PullRequest
3 голосов
/ 18 марта 2012

Приложение My Rails 3.2 использует две разные базы данных. Основная операционная система - MySQL, а другая - БД sqlserver:

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

1 Ответ

0 голосов
/ 18 июля 2012

Вы смотрели на жемчужину квартиры: https://github.com/bradrobertson/apartment?

Он предоставляет вам средства для работы с несколькими базами данных.

...