2013-05-03 35 views
0

對不起,如果標題不清楚 - 我不知道如何說出這個問題。Rails Ransack搜索以獲得條件的總和

我使用rails 3.2,postgresql和ruby 1.9.3。

我有兩個模型:訂單,其中有很多項目。訂單具有items_count的counter_cache,並且項目具有狀態。我需要爲日期範圍內的訂單查找狀態爲「in_progress」的商品。

我目前正在使用Ransack作爲我的搜索表單,起初它很好,因爲我主要只是想要訂單。然後,我需要獲得訂單項目的數量,我已經使用items_count訂購的counter_cache總和完成了這些項目。但是現在我需要將這個總和限制在只有in_progress的項目中。

@search = Order.order("orders.created_at desc").search(params[:q]) 

# This retrieves all orders within the search params, and 
# paginates them with kaminari 
@orders = @search.result(distinct: true).page(params[:page]).per(params[:per]) 

# Here is use the original search again because my total 
# needs to exclude estimates, and then sum the items 
@items_total = @search.result(distinct: true).where(estimate: false) 
    .sum(:items_count) 

因此,這將讓我的總和,但我需要的只是items.status='in_progress'的總和。我傾向於循環使用已有的訂單,並手動添加in_progress項目,使用Ruby而不是SQL。但我認爲可能有更好的方法來處理這個問題。

謝謝!

回答

1

你可以試試這個:

@search = Order.order("orders.created_at desc").includes(:items).where("items.status = 'in_progress'").search(params[:q]) 
+0

嗯,我不認爲這正是我要找的 - 如果訂單沒有任何正在進行中的項目,它不會被列入結果(AFAICT)。我開始認爲這並不是一件容易的事情(或者會花費很多時間)。我需要在搜索參數中獲得所有訂單,然後使用相同的搜索獲取進行中項目的數量。我認爲這只是一個昂貴的頁面加載,可能屬於應用程序的其他地方。 – d3vkit 2013-05-03 17:14:45