如何搜索 Spree::Orders 以及与搜查的关联 gem

How to search Spree::Orders and associations with ransack gem

使用 Spree 和 ransack,如何 return 包含在 Spree::Orders 中的 Spree::Variants 从某个日期开始完成?搜索文档提供了一些关于搜索关联的建议,但似乎不够深入。

Spree::Order
  has_many :line_items

Spree::LineItem
  belongs_to :line_item
  belongs_to :variant 

Spree::Variant
  has_many: line_items

可以通过以下方式搜索已完成的订单:

  o=Spree::Order.complete.ransack(completed_at_gt: '2015-05-01')

但是如何找到这些订单中的 Spree::LineItems 和 return 这些订单中的 Spree::Variants' SKU 尚不清楚。

我正在尝试使用搜查,因为这将用于 Spree 报告。

你根本不需要在这个区域使用搜查。 ActiveRecord 会让你做你想做的事:

Spree::Order.complete.where(
  Spree::Order.arel_table[:completed_at].gteq(
    Date.new(2015, 10, 1)
  )
).joins(
  line_items: :variant
).select(:sku).distinct.pluck(:sku)

如果您必须使用搜索,您可以使用 .result 获取 ActiveRecord 关系并应用连接等。

Spree::Order.complete.ransack(
  completed_at_gt: '2015-05-01'
).result.joins(
  line_items: :variant
).select(:sku).distinct.pluck(:sku)

因为您没有 .pluck,所以您 运行 是 Rails 4 之前的真正旧版本的 Spree。您可以使用以下方法获取结果:

Spree::Order.complete.ransack(
  completed_at_gt: '2015-05-01'
).result.joins(
  line_items: :variant
).select(:sku).map(&:sku).uniq