Rails 4:如何过滤没有符合特定条件的has_many记录的记录?

时间:2015-05-14 17:55:32

标签: ruby-on-rails activerecord

以下是我遇到的问题: 我有一个带有questions对象的应用,其中has_many answers。答案有一个status属性,可以等于accepted

如何编写只返回零接受答案的问题的ActiveRecord查询?这就是我目前所尝试的:

 class Question < ActiveRecord::Base
   has_many :answers

   def self.needs_answers
     self.includes(:answers).group('questions.id').where('answers.id IS NOT NULL OR answers.status != 'accepted').references(:answers)
   end
 end

但是,如果一个问题有2个答案,一个被接受而另一个不答案,那么该查询仍会返回。如何过滤掉这些记录?

1 个答案:

答案 0 :(得分:2)

基于COUNT的复杂加入/拥有可能有其他方法,但我能想到解决这个问题的最简单方法是使用子选择:

def self.needs_answers
  where.not id: joins(:answers).where(answers:{status: 'accepted'})
end