ruby-on-rails - 按关联表的项目计数排序

标签 ruby-on-rails postgresql

我有模型 Gif,它有 has_many gif_statisticsGifStatistic 模型有字段 status 和可能的选项:likedislike。 我有这样的查询 Gif.joins(:gif_statistics).where(...)。我想根据 likedgif_statisticsordisliked` 的计数来排序这个查询,例如。

伪代码

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/

相关文章:

sql - 生成带有列值的 json 作为 json 字典键

postgresql - 在 PostgreSQL 的记录中查找最后出现的值

postgresql - 使用 Postgres 在多个字段中搜索一个术语

sql - 在 AWS Redshift 中旋转非数字表

postgresql - 如何统计一个用户与多个表的连接数?

javascript - Ruby on Rails - 未捕获的 ReferenceError : $ is not defined

ruby-on-rails - rails 应用文件夹目录结构

ruby-on-rails - 如何从 rake 任务中调用 Rails 缓存清扫器?

ruby-on-rails - 在 Ruby on Rails 中将两个模型链接在一起

ruby-on-rails - 使用Rails应用程序推送到Heroku时,如何忽略文件夹和文件?