我的对象模型有点像这样:
Order
has_many line items
has_many transactions
has_many products through line items
Line Items
has_one product
所以,要获得我去过的产品的所有订单:
product = Product.find(1)
Order.includes(:transactions, line_items: [:product]).where(line_items: {product: product})
这里的问题是,如果订单有5个订单项,我希望在查看订单对象时加载所有5个订单项。但是,使用上面的代码我只获得具有指定产品的订单项。有没有办法完全加载订单对象,而不是单独对每个项目进行.reload?只想急切加载整个对象。
答案 0 :(得分:1)
这在一个查询中很难做到。我只能使用ActiveRecord方法得到的最直接的是:
Order.includes(:transactions, line_items: [:product])
.where(id: LineItem.where(product: product).pluck(:order_id))
我对Arel了解不多,但我认为它可以在一个查询中完成,而不是两个。