我们遇到Ruby on Rails 3.0.3应用程序的问题。似乎由于某种原因,当我们在MSSQL模型上执行find()时,ActiveRecord正在使用为MySQL格式化的查询。 rails app正在使用MySQL作为其模型;但是,也有在MSSQL数据库中支持的参考模型。如下面的消息所示,我们使用的是ODBC连接。当我打电话给Club.find(137)时,我收到以下错误:
ODBC ::错误:37000(102)[unixODBC] [FreeTDS] [SQL Server]'LIMIT'附近的语法不正确:SELECT [club]。* FROM [club] WHERE([club]。[ ClubID] = N'137')LIMIT 1
请注意,Club.find(:all)工作正常,因此连接正常工作,问题在于生成SQL查询格式。 OtherModel.find(1)也可以工作(连接到MySQL数据库的模型)。
我在做什么不可能?我正在考虑缓存查询的东西...有谁知道如何解决上述问题?非常感谢所有的帮助。
以下是设置:
宝石: 宝石'mysql2' 宝石'rails-dbi' 宝石'ruby-odbc' gem'activerecord-sqlserver-adapter'
模型(示例):
class Club < External
...
end
class External < ActiveRecord:Base
establish_connection('mssql_' + Rails.env)
...
end
class OtherModel < ActiveRecord:Base
...
end
database.yml示例:
environment:
adapter: mysql2
encoding: utf8
host: localhost
pool: 5
username:
password:
database: my_app_development
mssql_environment:
adapter: sqlserver
mode: odbc
pool: 5
dsn: MYDSN
username:
password:
答案 0 :(得分:1)
我是适配器的作者,我们在SQL Server的Arel访问者中有一些东西必须扩展访问者的限制/偏移量。我认为这是我们在最新版本中修复的错误,因此在多数据库环境中使用SQL Server适配器的人有更好的体验。