7

我的 ActiveRecord 模型中有以下行:

class Record < ActiveRecord::Base
    has_many :users, :through => :record_users, :uniq => true, :order => "record_users.index ASC"

这是为了让我能够以我使用 record_users 模型中的索引字段排序的方式读出 record.users。

问题是这在 PostgreSQL 上失败并出现以下错误:

ActionView::TemplateError (PGError: ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list

有没有办法修复声明以使其工作?

4

3 回答 3

10

我想您可以将其称为 ActiveRecord 中的错误。PosgreSQL 比 MySQL 更严格一些。您可以通过设置这样的关联来帮助 ActiveRecord:

class Record < ActiveRecord::Base
  has_many :users,
   :through => :record_users,
   :select => 'DISTINCT users.*, record_users.index',
   :order => "record_users.index ASC"
于 2009-11-11T18:21:17.967 回答
2

刚刚在 github 上的 rails 问题跟踪器上发布了这个问题(从灯塔票上复制,所以我们可以把它带回来。它被标记为无效):

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

如果您想很好地修复它,请推广它!:)

于 2011-05-11T16:19:12.497 回答
1

我之前遇到过类似的事情,我相信这是一个与 PGSQL 相关的 AR 错误(https://rails.lighthouseapp.com/projects/8994/tickets/1711-has-many-through-association-with-order-causes-a -sql-error-with-postgresql)。

我通过删除 DISTINCT (:uniq) 指令解决了这个问题,并以另一种方式解析了 uniq 记录。不过有点无赖。

于 2009-11-11T16:30:56.463 回答