尝试学习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。
发布于 2017-08-18 20:24:59
要回答您的问题,您可以这样做
@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,name为lineItem.product_name,quantity为lineItem.quantity。
但是,实现这一点的适当方法是
Spree::LineItem.joins(:order).includes(variant: :product)
.where(spree_orders: {state: 'complete', shipment_state: 'ready'})和访问属性,如lineItem.sku、lineItem.name、lineItem.quantity
我们可以这样做,因为在line_item模型中,sku和name被委托给variant。这与您获得DelegationError的原因相同。
https://stackoverflow.com/questions/45755320
复制相似问题