2013-05-03 2 views
0

Извините, если заголовок непонятен - я не совсем уверен, как сформулировать этот вопрос.Rails Ransack искать, чтобы получить сумму ассоциации с условиями

Я использую рельсы 3.2, postgresql и ruby ​​1.9.3.

У меня есть две модели: заказ, в котором много предметов. Заказы имеют counter_cache для items_count, а элементы имеют статус. Мне нужно найти элементы со статусом «in_progress» для заказов в диапазоне дат.

В настоящее время я использую Ransack для своей формы поиска, и сначала это было нормально, потому что я в основном просто хотел получить заказы. Затем мне нужно было подсчитать количество элементов для заказов, которые я сделал с суммой counter_cache для заказа для items_count. Но теперь мне нужно ограничить эту сумму только элементами, которые являются 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

Смежные вопросы