我基本上是想把这个语句转换成SQL:

Member.all.select{|e|e.quizzes.present? && e.quizzes.any?{|q|!q.completed} }

到目前为止我有这个:
Member.joins(:quizzes).group("enterprise_members.id HAVING count(quizzes.id) > 0")

但这并没有考虑到仅仅通过未设置为完成的测验来界定我的查询范围
我该怎么做?

最佳答案

这有用吗?

Member.joins(:quizzes).where('quizzes.completed = ?', false)

这将返回至少有一个未完成测试的成员。注意,这假定不允许空值作为completed的值。如果允许为空,那么你必须说
Member.joins(:quizzes).where('quizzes.completed is null or quizzes.completed = ?', false)

我不确定这是否就是你想要的。如果您用英语而不是/和代码描述所需的结果,这将很有帮助。

10-06 05:41