Rails находят: включают в среду с несколькими БД - PullRequest
1 голос
/ 19 июня 2009

Я делаю сайт в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...