MSSQL RoR ActiveRecord Query中的LIMIT子句

时间:2011-03-18 19:32:52

标签: ruby-on-rails ruby

我们遇到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: 

1 个答案:

答案 0 :(得分:1)

我是适配器的作者,我们在SQL Server的Arel访问者中有一些东西必须扩展访问者的限制/偏移量。我认为这是我们在最新版本中修复的错误,因此在多数据库环境中使用SQL Server适配器的人有更好的体验。