根据其他类型的关联资源数量对资源进行排序

时间:2017-09-10 12:46:36

标签: ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord ruby-on-rails-5

我有一个有很多评论的电影模型, 我只想根据每部电影的相关评论数量,使用SQL Inside活动记录对它们(电影)进行排序。

我们如何以最有效的方式实现这样的行为。

我想在没有计数器缓存列的情况下即时执行此操作

1 个答案:

答案 0 :(得分:0)

你可以做这样的事情

@top_ten_movies = Comment.includes(:movie).group(:movie_id).count(:id).sort_by{|k, v| v}.reverse.first(10)
  • 包含(:movie)这可以防止sql中的n + 1
  • group(:movie_id)=基于每个评论的电影分组
  • sort_by {| k,v | v} =这将产生一个数组数组,例如[[3,15],[0,10] [2,7],...]
  • 第一部分[3,15] =意味着id = 3的电影,有15条评论
  • 你可以访问数组@top_ten_movies [0] =第一部有顶级评论的电影
  • 默认为升序,反向您将获得降序评论