连接多次错误显示的连接子模型结果项的查询
我有以下模型,每个模型都是前一个模型的相关子模型(为简洁起见,我排除了其他模型方法和声明):
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.count
( most_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中)的两个地方,你需要将它替换为你想要选择的实际列。 由于这是一个范围,因此最好选择课程表中的所有字段,但您需要单独指定它们。