Я делаю сайт в RoR и нахожусь в среде с несколькими БД. Я имею в виду, что некоторые из моих моделей связаны с таблицами MSSQL, а некоторые другие связаны с таблицами MYSQL.
По большей части это работает хорошо, но когда я использую опцию include в методе find, я получаю очень странное сочетание SQL. Позвольте мне показать вам пример:
[SELECT * FROM "viewInfoClient" WHERE ("viewInfoClient".`NoClient` IN (6044196,5000652,0204392)) ]
MSSQL использует "между таблицами и именем столбца
MYSQL использует `
Когда я использую опцию :include
в модели MYSQL, он попытается прочитать соответствующие результаты в таблице модели MSSQL. Поскольку поле ссылки NoClient происходит из моей модели MYSQL, оно смешивается, и MSSQL выдает ошибку, которая логична.
[unixODBC][FreeTDS][SQL Server]Incorrect syntax near '`'
Есть идеи, как мне решить эту проблему?
МОДЕЛЬ КЛИЕНТА (база данных MSSQL)
class Client < ActiveRecord::Base
establish_connection "mssql_#{RAILS_ENV}"
set_table_name "viewInfoClient"
set_primary_key "NoClient"
has_many :billets, :foreign_key => 'noclient', :primary_key => 'NoClient'
end
BILLET MODEL (База данных MySQL)
class Billet < ActiveRecord::Base
belongs_to :client, :foreign_key => 'noclient'
end
ЗАЯВЛЕННОЕ ЗАЯВЛЕНИЕ
Может быть что угодно, используя: включить в него между 2.
Пример из модели Заготовка
def findall
find(:all, :include => 'client', :conditions => 'bin_id = 1')
end
Вернется:
SELECT * FROM "viewInfoClient" WHERE ("viewInfoClient".`NoClient` IN (6044196,5000652,0204392))
Где (6044196,5000652,0204392)
- это 3 записи с bin_id = 1
в модели Billet
.
Я удаляю все остальное из моих моделей, чтобы сократить код, но это в принципе. Я могу воспроизвести его из любой модели, использующей ссылку MySQL - MSSQL.