我正在尝试搜索订单已完成的所有LineItem。
# /spree/order.rb
def self.complete
where.not(completed_at: nil)
end
我试过了:
product.orders.complete.map { |o| o.line_items }.flatten
但它返回一个数组而我无法.where(variant_id: ID)
。
或:
product.orders.includes(:line_items).complete.where(line_items: { variant_id: 263})
但它说:PG::UndefinedTable: ERROR: missing FROM-clause entry for table "line_items"
然后我尝试了:
product.line_items.includes(:order).where(variant_id: ID).where.not(order: { completed_at: nil })
然后返回ActiveRecord::ConfigurationError: Association named 'orders' was not found on Spree::LineItem; perhaps you misspelled it?
这种方式也可以:product.orders.complete ...
但不知道如何通过其variant_id搜索LineItem。
我该如何解决?如何返回属于已完成订单的所有Product的LineItem?
非常感谢!
答案 0 :(得分:0)
稀释。好的,想通了。
最后解决了这个问题,请注意我将表名从orders
更改为spree_orders
:
product.line_items.joins(:order).where.not(spree_orders: { completed_at: nil })
而且,可以使用.includes(:order)
完成,但它似乎会进行更长时间的查询并且需要比.joins(:order)
更长的时间。
答案 1 :(得分:0)
你可以很容易地这样做:
orders_completed
现在,您可以在product
上致电product.orders_completed
:
product.orders_completed.where(...)
然后你就可以链接到任何地方:
ng-click