我在Section
模型中有这个。
scope :active, {
select: 'sections.*, COUNT(quizzes.id) as quiz_count',
joins: 'LEFT JOIN quizzes ON quizzes.section_id = sections.id',
group: 'sections.id',
having: 'quiz_count > 0',
where: 'sections.is_test = true'
}
如果我不包含where
密钥,那么它的效果非常好。
但是如何在语句中附加这个where
子句以使其在语法上正确?
答案 0 :(得分:1)
您能否在范围内发布模型的关系?
据我所知,您可以尝试这样做
scope :active, {
select: 'sections.*, COUNT(quizzes.id) as quiz_count where sections.is_test=true',
joins: 'LEFT JOIN quizzes ON quizzes.section_id = sections.id',
group: 'sections.id'
having: 'quiz_count > 0'
}
<强>更新强> 也许你可以使用合并范围,比如
scope :test, {where is_test: true},
然后
Section.test.active.
我查看了上面的代码,在这种情况下,我们不必使用上层sql,我们可以使用
counter_cache: true
,范围可以是
scope :active,{where("quiz_count>?",0)}
参考:http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference