导轨:如何获取对象至少有一个孩子? [英] Rails: How to get objects with at least one child?
本文介绍了导轨:如何获取对象至少有一个孩子?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
谷歌搜索,浏览SO和阅读后,似乎没有成为一个Rails风格的方式来有效地获得只有那些 父
对象具有的至少有一个的孩子
对象(通过的has_many:儿童
的关系)。在普通的SQL:
SELECT *
父母
在存在(
选择1
儿童
WHERE PARENT_ID = parents.id)
我来最接近的是
Parent.all.reject {|母公司| parent.children.empty? }
(基于另一个答案),但它确实低效的,因为它运行的每个<$ C $一个单独的查询C>父。
解决方案
Parent.joins(:儿童).uniq.all
After googling, browsing SO and reading, there doesn't seem to be a Rails-style way to efficiently get only those Parent
objects which have at least one Child
object (through a has_many :children
relation). In plain SQL:
SELECT *
FROM parents
WHERE EXISTS (
SELECT 1
FROM children
WHERE parent_id = parents.id)
The closest I've come is
Parent.all.reject { |parent| parent.children.empty? }
(based on another answer), but it's really inefficient because it runs a separate query for each Parent
.
解决方案
Parent.joins(:children).uniq.all
这篇关于导轨:如何获取对象至少有一个孩子?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文