Spree,Rails LineItems只获得belongs_to已完成Order的那些

时间:2015-10-12 07:30:10

标签: sql ruby-on-rails postgresql spree

我正在尝试搜索订单已完成的所有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?
非常感谢!

2 个答案:

答案 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