如何在此范围声明中附加我的Where子句?

时间:2014-03-17 17:51:08

标签: sql ruby-on-rails syntax scope

我在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子句以使其在语法上正确?

1 个答案:

答案 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