我在RoR中创建一个站点,我在一个多数据库环境中。这样,我的意思是我的一些模型链接到MSSQL表,其他一些模型链接到MYSQL表。
它在大多数情况下运行良好,但是当我在find方法中使用'include'选项时,我得到了一个非常奇怪的SQL混合。让我举个例子:
[SELECT * FROM "viewInfoClient" WHERE ("viewInfoClient".`NoClient` IN (6044196,5000652,0204392)) ]
MSSQL使用“表和列之间的名称
MYSQL使用`
当我在MYSQL模型中使用:include
选项时,它会尝试在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之间。 Billet模型的例子
def findall
find(:all, :include => 'client', :conditions => 'bin_id = 1')
end
将返回:
SELECT * FROM "viewInfoClient" WHERE ("viewInfoClient".`NoClient` IN (6044196,5000652,0204392))
(6044196,5000652,0204392)
是bin_id = 1
模型中Billet
的3条记录。
我从模型中删除了其他所有内容以缩短代码,但这基本上就是这样。我可以从任何使用MySQL-MSSQL链接的模型中重现它。