我想展示一个杂志库,展示每个杂志标题的最新版本,但是根据该杂志的订阅数量排序。我提出了这个问题
class IssuesController < ApplicationController
def index
@issues = Issue
.includes(:magazine)
.order('magazines.subscriptions_count DESC')
.order(:release)
.paginate(page: @page, per_page: 25)
end
end
它正确地通过suscriptions_count命令它们,但是每个杂志有很多条目,每个问题都按顺序显示。我只想要每个人的第一本杂志。我已尝试将uniq
添加到查询group(:magazine_id)
,limit(1)
等等,但我无法将其显示为每个杂志标题只显示一个问题。
答案 0 :(得分:0)
我找到了这个答案PostgreSQL -must appear in the GROUP BY clause or be used in an aggregate function
引导我select("DISTINCT_ON('magazine_id') *")
。效果很好,只为每个magazine_id
def index
@issues = Issue
.includes(:magazine)
.select("DISTINCT ON (magazine_id, magazines.subscriptions_count) *")
.order('comics.subscriptions_count DESC')
.paginate(page: @page, per_page: 25)
end