以下是我遇到的问题:
我有一个带有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个答案,一个被接受而另一个不答案,那么该查询仍会返回。如何过滤掉这些记录?
答案 0 :(得分:2)
基于COUNT
的复杂加入/拥有可能有其他方法,但我能想到解决这个问题的最简单方法是使用子选择:
def self.needs_answers
where.not id: joins(:answers).where(answers:{status: 'accepted'})
end