找到没有.join的地方

时间:2014-11-12 02:09:38

标签: ruby-on-rails ruby model

我有Question.rb(has_one:answer)和Answer.rb(belongs_to:question)。

我想在视图中输出未回答问题的数量。我认为它会是这样的:

Question.where(answer.blank?)

Question.notJoin(:answers)

我知道我的语法已经过时了,我不太确定这是模型范围还是控制器实例变量,但我不明白为什么这对我来说不容易用铁轨完成。

有人能指出我在这里正确的方向 - 我真的很感激。

2 个答案:

答案 0 :(得分:2)

您可以在left joinquestions之间使用answers,如下所示:

Question.joins(
  'left join answers on questions.id = answers.question_id'
).where(answer: { id: nil })

这会给你所有没有答案的问题。

您可以将此查询放在作用域或类方法中,或在方法中使用它。这真的是你的选择。

答案 1 :(得分:1)

您还可以向问题添加答案计数器缓存,然后根据该选项进行选择。

class Answer < ActiveRecord::Base

  belongs_to :question, :counter_cache => true

然后将范围添加到问题

scope :no_answers, -> { where(:answers_count => 0) } 

然后它读起来很棒

Question.no_answers