2015-10-13 57 views
3

使用Spree和ransack,如何返回從特定日期開始已完成的Spree :: Orders中包含的Spree :: Variants?這個搜索文件給出了關於搜索關聯的一些建議,但似乎沒有足夠深入。已完成如何搜索Spree ::訂單和與ransack gem的關聯

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') 

但如何找到狂歡::這些訂單中了LineItem並返回施普雷::變種這些訂單內的SKU還不清楚。

我正在嘗試使用ransack,因爲這將用於Spree報告中。

回答

1

根本不需要在這方面使用ransack。 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) 

如果必須使用搜查,你可以得到的ActiveRecord的關係,利用.result和應用的連接和等。

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

既然你沒有.pluck你,你正在運行一個真正的舊版本施普雷即預導軌4.您可以用得到的結果:

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

問題規定因爲看起來ransack是事實上的狂熱報告,所以需要快速搜索。我已經更新了這個問題來反映這一點。除此之外:''undefined method'pluck'for#' – mvanio

+0

我已根據您的反饋添加了其他答案。初始查詢適用於Spree 2.1+,但在Rails 3中不存在'.pluck',因此您需要以列出的替代方式獲取值。 – gmacdougall

+0

謝謝。 Spree已更新,並按建議工作。 – mvanio