如何使用ransack gem搜索Spree :: Orders和association

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

标签: ruby-on-rails-3 spree ransack

使用Spree和ransack,怎样才能返回Spree :: Orders中包含的Spree :: Variants,这些变量自某个日期以来已经完成? ransack文档提供了一些关于搜索关联的建议,但似乎不够深入。

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并返回Spree :: Variants'这些订单中的SKU尚不清楚。

我试图使用ransack,因为这将在Spree报告中使用。

1 个答案:

答案 0 :(得分:1)

你根本不需要在这个区域使用搜索。 ActiveRecord将让您做您需要的事情:

.result

如果必须使用ransack,则可以使用Spree::Order.complete.ransack( completed_at_gt: '2015-05-01' ).result.joins( line_items: :variant ).select(:sku).distinct.pluck(:sku) 获取ActiveRecord关系并应用连接等。

.pluck

由于您没有Spree::Order.complete.ransack( completed_at_gt: '2015-05-01' ).result.joins( line_items: :variant ).select(:sku).map(&:sku).uniq ,因此您正在运行一个真正旧版本的Spree,这是一个pre-Rails 4.您可以使用以下方式获得结果:

/dev/shm