我有模型 Gif
,它有 has_many gif_statistics
。 GifStatistic
模型有字段 status
和可能的选项:like
或 dislike
。
我有这样的查询
Gif.joins(:gif_statistics).where(...)
。我想根据 liked
gif_statisticsor
disliked` 的计数来排序这个查询,例如。
伪代码
Gif.joins(:gif_statistics).where(...).order("gifs.gifs_statistics.where(state: "liked").count)")
我尝试应用 sort
方法,但是没有用。我还能尝试什么来实现这一目标?此外,我只有在 where
子句之后按计数排序
最佳答案
请让我尝试回答。我当然会直接使用 SQL 来执行此操作。您始终可以使用数组和映射在 Ruby 中进行聚合,但这会产生很差的性能。这是您的 SQL 查询(请更正任何错误,因为我没有您的架构,因此我无法对其进行测试)。
select g.id, s.status, count(s.status) cnt
from gifs g
inner join gif_statistics s
on g.id = s.gif_id
group by g.id, s.status
order by cnt
现在请参阅此文档以在 ruby 中运行 SQL:
http://guides.rubyonrails.org/active_record_querying.html#finding-by-sql
关于ruby-on-rails - 按关联表的项目计数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30464120/