gpt4 book ai didi

ruby-on-rails - 使用条件 Rails 按计数范围排序

转载 作者:行者123 更新时间:2023-12-04 06:16:19 25 4
gpt4 key购买 nike

我有一个型号Categoryhas_many Pendencies .我想创建一个范围,按具有 active = true 的挂起数量对类别进行排序不排除 active = false .

到目前为止,我所拥有的是:

scope :order_by_pendencies, -> { left_joins(:pendencies).group(:id).order('COUNT(pendencies.id) DESC')}

这将按未决数排序,但我想按具有 active = true 的未决数排序.

另一种尝试是:
scope :order_by_pendencies, -> { left_joins(:pendencies).group(:id).where('pendencies.active = ?', true).order('COUNT(pendencies.id) DESC')}

这将按具有 pendencies.active = true 的挂起数排序, 但将排除 pendencies.active = false .

感谢您的帮助。

最佳答案

我猜您想按事件挂起的数量进行排序,而不忽略没有事件挂起的类别。

那将是这样的:

scope :order_by_pendencies, -> { 
active_count_q = Pendency.
group(:category_id).
where(active: true).
select(:category_id, "COUNT(*) AS count")

joins("LEFT JOIN (#{active_count_q.to_sql}) AS ac ON ac.category_id = id").
order("ac.count DESC")
}

等效的 SQL 查询:
SELECT *, ac.count 
FROM categories
LEFT JOIN (
SELECT category_id, COUNT(*) AS count
FROM pendencies
GROUP BY category_id
WHERE active = true
) AS ac ON ac.category_id = id
ORDER BY ac.count DESC

请注意,如果某个类别没有事件的未决项,则计数将为空,并将添加到列表的末尾。
可以添加一个类似的子查询,以额外按未决总数排序...

关于ruby-on-rails - 使用条件 Rails 按计数范围排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54611318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com