在 rails 查询上狂欢 Ruby

Spree Ruby on rails query

努力学习 Ruby 和 Spree

我的控制器中有一个查询运行没问题:

@products = Spree::LineItem.select("spree_line_items.id, 
spree_variants.sku, spree_products.name, spree_line_items.quantity")
.joins(:order).joins(:variant).joins(:product)
.where(spree_orders: {state: 'complete', shipment_state: 'ready'})

当我运行我认为查询

<% @products.each do |lineItem| %>
<%= lineItem.id %><br>
<% end %>

这工作正常并吐出所有 ID,但我想输出其他位、Sku、名称和数量,它们都来自其他表。我如何将它们带到这里?

如果我引用它们与 ID 相同,我会收到 DelegationError。

要回答您的问题,您可以这样做

@products = Spree::LineItem.select("spree_line_items.id, 
spree_variants.sku AS variant_sku,
spree_products.name as product_name,
spree_line_items.quantity as quantity")
.joins(:order).joins(:variant).joins(:product)
.where(spree_orders: {state: 'complete', shipment_state: 'ready'})

然后访问 sku 为 lineItem.variant_sku,名称为 lineItem.product_name,数量为 lineItem.quantity

但实现这一目标的适当方法是

Spree::LineItem.joins(:order).includes(variant: :product)
.where(spree_orders: {state: 'complete', shipment_state: 'ready'})

并以 lineItem.skulineItem.namelineItem.quantity

的形式访问属性

我们可以这样做,因为 skunameline_item 模型中被委托给 variant。这与您收到 DelegationError 的原因相同。