Ruby on rails Rails 5需要查找与子对象集合关联的所有父对象

Ruby on rails Rails 5需要查找与子对象集合关联的所有父对象,ruby-on-rails,Ruby On Rails,当我有一个孩子的集合(发票),我想找到所有的父母(订单),我该怎么做呢 所以订单有很多:发票 如何查找与发票集合关联的所有订单?这应该可以做到: invoices = some_logic_to_get_invoices orders = Order.includes(:invoices).where(invoices: { id: invoices }) 这应该可以做到: invoices = some_logic_to_get_invoices orders = Order.include

当我有一个孩子的集合(发票),我想找到所有的父母(订单),我该怎么做呢

所以订单
有很多:发票


如何查找与发票集合关联的所有订单?

这应该可以做到:

invoices = some_logic_to_get_invoices
orders = Order.includes(:invoices).where(invoices: { id: invoices })

这应该可以做到:

invoices = some_logic_to_get_invoices
orders = Order.includes(:invoices).where(invoices: { id: invoices })

invoices.map(&:orders).uniq
invoices.map(&:orders).uniq

这是最昂贵的(性能方面的)方法。另外,数组数组应该是
flatte
ed。不要要求Rails以非常高效的方式来做SQL可以做的事情,这是最昂贵的(性能方面的)方法。另外,数组数组应该是
flatte
ed。不要要求Rails以非常高效的方式完成SQL可以完成的事情成功!我觉得有点奇怪,在
where
中,您可以要求嵌套的
id
键以单数形式给出一个集合(复数)作为值。@code MonKy这是因为
invoices
实际上是一个ActiveRecord::Relation对象,它是一个作用域,Rails的ActiveRecord知道您要“嵌套”在where子句中定义了该范围。查看订单。包括(:发票)。其中(发票:{id:invoices})。to_sql
。另外,如果
invoices
是一个数组,则必须
map(&:id)
才能执行显式版本。成功!我觉得有点奇怪,在
where
中,您可以要求嵌套的
id
键以单数形式给出一个集合(复数)作为值。@code MonKy这是因为
invoices
实际上是一个ActiveRecord::Relation对象,它是一个作用域,Rails的ActiveRecord知道您要“嵌套”在where子句中定义了该范围。查看订单。包括(:发票)。其中(发票:{id:invoices})。to_sql
。另外,如果
invoices
是一个数组,则必须
map(&:id)
才能执行显式版本。