使用SQL Server 2008数据库通过activerecord-sqlserver-adapter gem进行Rails 3.1,Ruby 1.9.2的安装。我正在使用旧版数据库,因此这不是自愿的。

我在使用ActiveAdmin时遇到了一个奇怪的问题。我以前没有使用过ActiveAdmin,而是在观看Railscast之后添加了它。按照标准安装说明进行操作,即可登录管理控制台。

当我添加模型时: 通用标签

该模型(复数形式)现在在ActiveAdmin仪表板上可见。但是,当我单击链接时,出现以下错误: 通用标签

现在,如果我直接在SQL Server数据库上运行此查询,则会返回相同的错误-它不喜欢未命名的“ 1”列。

开始挖掘以查看问题所在。显而易见的地方是在activeadmin和activerecord之间的转换,然后是activerecord和SQL Server适配器之间的转换。这是第一个交叉点的堆栈跟踪: 通用标签

看起来像items_in_collection吗?通话存在吗?在已删除订单过滤器的集合中。至此,我们将移交给ActiveRecord。如果我们看一下从ActiveRecord到SQL Server适配器的过渡,看起来好像已经形成了SELECT语句: 通用标签

我对为什么以这种方式生成SQL感到完全困惑。有几个候选问题区域:

  1. 我正在使用具有奇特模式的旧式数据库。我必须在模型中设置表名和主键名。我不认为这是问题,因为即将出现的查询似乎使用了适当的主键和表名。
  2. activerecord-sqlserver-adapter宝石问题。但是,我提取了源代码,并确定其中没有任何东西可以以这种方式组装此查询。

    有人遇到类似的事情吗?可能我只需要调试整个堆栈即可查看发生了什么。认为首先值得在这里进行检查。

    编辑:我现在相当确定这是activerecord-sqlserver-adapter中的错误。我将在这里发布决议。

    Edit2:完全没有ActiveAdmin即可重现该错误。这与sql server适配器处理偏移量查询的方式有关。打电话 通用标签

    产生相同的错误。我的适配器有一个丑陋的补丁,可以通过所有的单元测试,但是在提出请求之前,我将尝试找到一个更优雅的解决方案。

有帮助吗?

解决方案

我不确定这是否是答案,但是我修补了本地代码,您的查询现在对我有用。

首先,github问题:

https://github.com/rails/rails/issues/1623

然后是对arkadiyk的修复请求:

https://github.com/arkadiyk/rails/commit/7e2ddddb303d17adc825ebb691097a93902fa539 / p>

基本问题是finder_methods.rb,它具有第187或188行附近的现有代码: 通用标签

由此生成的未命名列上的MSSQL barfs,因此以下代码对其进行了修复: 通用标签

希望有帮助。

其他提示

似乎有两个替代方法:将其固定在Rails中,或在ActiveRecord-SQLServer-适配器中修复它。

Raels提供的链接可能是解决此问题的正确方法,但是,拉出请求尚未被接受到Rails中。我担心使用修补版的rails,因为这将强迫我用我修补的版本坚持,或者继续修补Rails演变。

al替代方法是在ActiveRecord-SQLServer-适配器中修复此功能。我在这里提交了一个拉出请求:

https://github.com/rails-sqlserver/activerecord-SQLSERVER-ADAPTER / PULL / 171

有可能的维护者的维护者将提出更优雅的修复程序。如果他这样做,我会更新这个答案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top