ruby on rails manys'很多

时间:2015-11-20 15:28:59

标签: ruby-on-rails model has-many

我想知道如何在没有双循环的情况下执行此操作。 假设我有一个用户模型和订单模型,以及用户has_many订单。

现在我有一个用户数组,其类是User :: ActiveRecord_Relation

如何在一行中获取这些用户的订单?

3 个答案:

答案 0 :(得分:2)

实际上,最好的方法是:

users.includes(:orders).map(&:orders)

因为你急于加载用户的订单(只有2个sql查询)

Order.where(user_id: users.pluck(:id))

在表现方面也非常好

答案 1 :(得分:1)

如果您有多对多关联并且需要快速加载所有相关订单,则需要小心避免所谓的“N加1”加载明显的做法:

orders = users.collect(&:orders).flatten

这将迭代每个用户并运行SELECT * FROM orders WHERE user_id=?之类的查询而不进行任何分组。

你真正想要的是:

orders = Order.where(user_id: users.collect(&:id))

这应该可以在一个查询中找到所有用户的所有订单。

答案 2 :(得分:0)

在我问完后,我的想法就出现了......

users.map {|user| user.orders}