Rails发现:包含在多DB环境中

时间:2009-06-19 15:21:38

标签: ruby-on-rails database activerecord

我在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链接的模型中重现它。

0 个答案:

没有答案