在 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.sku
、lineItem.name
、lineItem.quantity
的形式访问属性
我们可以这样做,因为 sku
和 name
在 line_item
模型中被委托给 variant
。这与您收到 DelegationError 的原因相同。
努力学习 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.sku
、lineItem.name
、lineItem.quantity
我们可以这样做,因为 sku
和 name
在 line_item
模型中被委托给 variant
。这与您收到 DelegationError 的原因相同。