我在我的控制器中有代码,它根据最高平均评分对专辑进行排名(使用了来自此解决方案的代码如何通过has_many评论关系显示最高评级的专辑):
@albums = Album.joins(:reviews).select("*, avg(reviews.rating) as average_rating").group("albums.id").order("average_rating DESC")
这段代码在我的开发环境(sqlite3)下完美运行,但是当我将代码推到Heroku和PostgreSQL时,出现了这个错误:
PG::GroupingError: ERROR: column "reviews.id" must appear in the GROUP BY clause or be used in an aggregate function
我意识到这是一个相当常见的问题,由于我对SQL经验不足,在重构代码时遇到了一些困难,以便在我的开发和生产环境中都能正常运行。
*
吗?@albums = Album.joins(:reviews).select("reviews.rating, albums.id, albums.name, albums.artist, albums.picture, avg(reviews.rating) as average_rating").group("albums.id").order("average_rating DESC")
- Reuben@albums = Album.joins(:reviews).select("albums.*, avg(reviews.rating) as average_rating").group("albums.id").order("average_rating DESC")
。 - slashreviews.rating
和avg(reviews.rating)
。因此,在一个结果行中,您正在尝试同时获取当前行的评分和平均评分?您可以编辑您的问题并添加两个表 reviews 和 albums 的结构,以及您期望接收哪些字段。 - slash