我有一个模型Parent
有很多孩子Child
。我想要获取所有父模型并展示每个Child
也是父母的。这是 Rails 的经典用例includes
方法,据我所知。
但是,我无法让 Rails 在不将父模型限制为具有子模型的情况下向子模型添加条件。
例如,这仅输出有孩子的父母:
Parent.includes(:children).where(children: {age: 10}).each do |parent|
# output parent info
parent.children.where("age = 10").each do |child|
#output child info
end
end
我看过Rails 包含有条件 https://stackoverflow.com/questions/16348333/rails-includes-with-conditions但似乎我遇到了与问题的OP相同的麻烦,并且接受的答案的任何一部分都没有解决它(它要么只有一些父母,要么诉诸多个查询)。
你需要使用LEFT JOIN http://www.postgresqltutorial.com/postgresql-left-join/.
Parent.joins("LEFT JOIN children ON parent.id = children.parent_id")
.where("parent.age = 10 AND children.age = 10")
.select("parent.*, children.*")
如果您想从parent
表中可能有也可能没有对应的行children
表,您使用LEFT JOIN
条款。如果没有匹配的行children
表中各列的值children
表被替换为NULL
values.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)