【问题标题】:PostgreSQL, Rails and :order => problemPostgreSQL、Rails 和 :order => 问题
【发布时间】:2009-11-11 11:56:32
【问题描述】:

我的 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

有没有办法修复该语句以使其工作?

【问题讨论】:

  • 能把生成的SQL贴出来吗?

标签: ruby-on-rails postgresql activerecord has-many


【解决方案1】:

我想您可以将其称为 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"

【讨论】:

  • 你可以,因为它是。 MySQL 在它接受的内容方面更加宽容和非标准。
  • 我不明白 - 我上面的解决方案有什么问题?我想知道,因为我在我自己在 Postgres 上运行的项目中使用它;)
  • Casper,我不认为 james 说这是一个糟糕的解决方案 ;-) 另外,这是一个错字 - DISTINCT?
  • 另外,我的问题是 - 有没有办法修复该语句以使其工作?你的回答很完美!
  • 酷。我想我认为詹姆斯对我的答案投了反对票,而他的评论就是对此的解释——猜猜不是;)
【解决方案2】:

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

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

如果您想很好地解决这个问题,请推广它! :)

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-06
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      相关资源
      最近更新 更多