【问题标题】:Rails - Order by the average of an associationRails - 按关联的平均值排序
【发布时间】:2016-02-10 09:40:04
【问题描述】:

我正在努力在我的假 imdb 模仿网站中添加排序功能。

我的电影通过协会获得了很多评论。不幸的是,我找不到如何通过索引页面的平均评论来订购 @movies 对象。

显然,这个

includes(:reviews).order("reviews.rating_out_of_ten desc")

仅按每部电影的第一次评论排序是行不通的。 如何编写它以便按所有相关评论的平均值排序??

在此先感谢

【问题讨论】:

  • 你需要在这个字段中的平均值??
  • 不确定我是否理解了这个问题,但我想要与电影相关的评论的 rating_out_of_ten 字段的平均值

标签: sql ruby-on-rails activerecord


【解决方案1】:

为了按平均电影分数排序,请加入评论表并在 order by 子句中使用avg 函数,即

Movie
    .select('movie_id, movie_name, avg(reviews.rating_out_of_ten)')
    .join(:reviews)
    .group('movie_id, movie_name')
    .order('avg(reviews.rating_out_of_ten) desc')

【讨论】:

  • 为什么movie_name 需要在组中?我觉得movie_id就够了
  • 我将movie_name 添加到组中,因为它在选择中。大多数数据库都有这个要求
  • 我还需要放入 includes(:reviews) 吗?选择不起作用,因为:“没有这样的列:reviews.rating_out_of_ten”
  • @FabienAlbi join 应该足够了
猜你喜欢
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 2012-06-28
相关资源
最近更新 更多