Rails和Postgresql如何使用自定义计数进行排序?ORDER BY不明确



关系用户has_many:套件

用户型号和命名范围:

  scope :top5_users,
    joins(:kits).
    select("users.*, count(kits.id) AS kits_count").
    group("users.id, kits.id").
    order("kits_count DESC").
    limit(5)

获取PG::错误:错误:ORDER BY"kits_count"不明确

该错误消息意味着您在用户中有一个名为kits_count的列,可能由回调维护。如果是这样,你可以更容易地只是:

scope :top5_users,
    order("kits_count DESC").
    limit(5)

如果不是。。。

RDBMS供应商对列别名的支持参差不齐,您可能会使用:

order("count(kits.id) desc")

如果你知道列号,你可以:

scope :top5_users,
    joins(:kits).
    select("count(kits.id) AS kits_count, users.*").
    group("users.id").
    order("1 DESC").
    limit(5)

在之前将kits.id从组中取出,否则你每计数一次就会得到1。

最新更新