PostgreSQL,Rails和:order =>问题

Asked
Viewd3487

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
 

是否有一种方法可以修复该语句以使其起作用?

  • 您可以发布生成的SQL吗?

    Luke FranclNovember 11, 2009 17:30

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"
 
  • 可以,因为可以。MySQL接受的内容更加宽松和不规范。

    MkVNovember 12, 2009 19:30
  • 另外,我的问题是-是否有一种方法可以修复该语句以使其起作用?您的答案非常完美!

    cmaughanNovember 13, 2009 11:37
  • 卡斯珀,我不认为詹姆斯在说这是一个糟糕的解决方案;-)另外,那是错别字吗-DISTINCT?

    cmaughanNovember 13, 2009 10:42
  • 我不明白-我上面的解决方案有什么问题?我想知道,因为我在Postgres上运行的自己的项目中使用了它;)

    Casper FabriciusNovember 13, 2009 08:25
  • 很酷。我想我以为James否决了我的回答,而他的评论只是对此的解释-不能;)

    Casper FabriciusNovember 13, 2009 12:23
  • 我的意思是我有重复的记录!

    amrntFebruary 12, 2012 19:35
2

只需将此问题发布在github上的rails的问题跟踪器上(从灯塔票中复制,以便我们可以将其带回。它被标记为无效):

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

如果要很好地解决此问题,请推广!:)

1

我之前遇到过类似的情况,并且我相信这是与PGSQL相关的AR错误( https://rails.lighthouseapp.com/projects/8994/tickets/1711-has-many-through-association-与订单原因导致SQL错误和Postgresql )。

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