Sql 如何执行计数和属性的where查询?
我实际上是在尝试将此语句转换为SQL:Sql 如何执行计数和属性的where查询?,sql,ruby-on-rails,postgresql,activerecord,Sql,Ruby On Rails,Postgresql,Activerecord,我实际上是在尝试将此语句转换为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
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)
这将返回至少有一个未完成测验的成员。注意:这假定不允许Null作为completed的值。如果允许空值,那么您必须说
Member.joins(:quizzes).where('quizzes.completed is null or quizzes.completed = ?', false)
我不确定这是否正是你想要的。如果您用英语而不是/以及代码描述所需的结果,这会很有帮助。我想您可以在第一个查询中调用
to_sql
,这样您就可以编写第二个查询了。@Pavan您不能在Ruby调用的末尾放入。to_sql
。@Pavan您不了解Rails作用域的基本知识,以及使用来创建sql
。触发SQL执行查询后,如执行.select{}
,您不能调用.to_SQL
,因为在执行.select
之后,它不再是ActiveRecord::Relation(Rails作用域!),而是一个数组!啊哈,别担心@Pavan,不需要道歉!我很高兴我教了你一些新东西:)这是我在这方面的主要目标website@MrYoshiji我也很高兴知道一些我以前不知道的事情:)那个时候不需要集体电话吗?我不这么认为,但就像我说的,我不能100%确定你们的要求是什么。非常感谢Max。我不得不在末尾附加我的.group
语句,以使其完美匹配。我真的很感谢你的回复!