基于子属性的关联查询

时间:2016-06-28 21:56:05

标签: ruby-on-rails activerecord ruby-on-rails-4.2

如果所有没有孩子或有孩子的父母,如果其“州”与“已批准”不同,我该怎么办?

Parent.includes(:children).where.not(children: { status: 'approved' })

"SELECT \"parents\".* FROM \"parents\" INNER JOIN \"children\" ON     "children\".\"parent_id\" = \"parents\".\"id\" WHERE \"children\".\"state\" = 'approved'"

只返回与status approved不同的子女的父母,但忽略没有子女的父母

Parent.includes(:children).where(children: { id: nil })

 "SELECT \"parents\".\"id\" AS t0_r0, \"parents\".\"date\" AS t0_r1, ........, \"parents\".\"slug\" AS t0_r33, \"children\".\"id\" AS t1_r0, \"children\".\"parent_id\" AS t1_r1, \"children\".\"request_state\" AS t1_r8 FROM \"parents\" LEFT OUTER JOIN \"children\" ON \"children\".\"edition_id\" = \"parents\".\"id\" WHERE \"children\".\"id\" IS NULL"

只返回没有孩子的父母

1 个答案:

答案 0 :(得分:1)

所以你需要一起加入这两个条件。

由于includes仅支持where子句中的哈希条件,因此我们需要使用references在SQL source中编写条件

  

使用这样的地方只有在你传递哈希时才会有效。对于   您需要的SQL片段使用引用强制连接表

Parent.includes(:children).where("children.status <> 'approved' OR children.id IS NULL").references(:children)

试一试