连接多次错误显示的连接子模型结果项的查询

我有以下模型,每个模型都是前一个模型的相关子模型(为简洁起见,我排除了其他模型方法和声明):

class Course < ActiveRecord::Base has_many :questions scope :most_answered, joins(:questions).order('questions.answers_count DESC') #this is the query causing issues end class Question  true has_many: :answers end class Answer  true end 

现在我只填充了一个Course (所以当我在控制台Course.all.count运行时,我得到1 )。 第一个Course目前有三个填充的questions ,但是当我运行Course.most_answered.countmost_answered是我在上面看到的Course编写的范围方法)时,我在控制台中得到3 ,这是不正确的。 我已经尝试了查询的各种迭代,以及查询Rails指南查询 ,但似乎无法弄清楚我做错了什么。 提前致谢。

根据我可以收集的内容,您最常回答的范围是尝试通过questions.answer_count的总和来订购.answer_count。

由于没有sum ,并且由于第一个课程有三个答案,因此您加入该表将产生三个结果。

你需要做的是如下:

 scope :most_answered, joins(:questions).order('questions.answers_count DESC') .select("courses.id, courses.name, ..., SUM(questions.answers_count) as answers_count") .group("courses.id, courses.name, ...") .order("answers_count DESC") 

您需要明确指定要选择的课程字段,以便可以在group by子句中使用它们。

编辑:

在我提到courses.id, courses.name, ... (在select和group中)的两个地方,你需要将它替换为你想要选择的实际列。 由于这是一个范围,因此最好选择课程表中的所有字段,但您需要单独指定它们。