如何搜索 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
使用 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