我有一个rails应用程序,其中包含发布食谱的用户。人们可以使用评级将评论发布到食谱。我想按照发布的食谱收到的评级的平均值对用户列表(索引操作)进行排序它们。
我已经使用这个来排序recpes列表了:
@courses = @recipes.joins(:comments).group('recipes.id').order('AVG(comments.rating)').reverse_order
我如何为用户做类似的事情? 我试图通过读取rails指南和apidock使用连接,组等来做到这一点,但仍然无法解决这个问题。
答案 0 :(得分:0)
试试这个,不确定它是否完全正确。希望它对你有所帮助。
User.joins(recipes: [:comments]).group('users.id').order('AVG(comments.rating) DESC')
我的模特是用户,测验,问题。令我困惑的部分是你对用户的定义。发布课程的用户以及在同一个表或单独表中发表评论的用户是?我嘲笑的关系就是这个,我认为这几乎与你的模型完全相同:
在这种情况下,如果我@users = User.joins(quizzes: [:questions]).group('users.id').order('AVG(questions.easy_count) DESC')
,我得到的结果是,结果@users
是拥有由easy_count(在您的案例评级中)排序的测验的用户的列表属于相应的测验。
User.joins(quizzes: [:questions])
simple为您提供了所有有问题的用户行(在您的情况下应该是课程),这些用户有问题(在您的情况下应该是评论)。考虑下面的例子:
从User.joins(quizzes: [:questions])
获得的结果将返回两个重复的user1行(因为user1通过quiz1与两个问题相关)
然后group('users.id')
将User.joins(quizzes: [:questions])
的结果分组为user.id
(您希望获得用户列表)
所以到目前为止,你得到的是非常简单的,它是一个有测验的用户列表,这些测验需要至少有一个问题,我很确定它是所有者的用户测验,而不是问题的所有者用户。
然后在结尾处按平均easy_count个问题排序此列表(在您的情况下,评论评级)