Извините, если заголовок непонятен - я не совсем уверен, как сформулировать этот вопрос.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. Но я думал, что может быть лучший способ справиться с этим.
Спасибо!
Хм, я не думаю, что это именно то, что я ищу - если заказ не имеет какого-либо в пунктах прогресса, он не будет включен в результаты (AFAICT). Я начинаю думать, что это будет нелегко сделать на одной странице (или будет дорогостоящим). Мне нужно получить все заказы в параметрах поиска, а затем подсчет находящихся в процессе элементов с тем же поиском. Я думаю, что это будет просто дорогостоящей загрузкой страницы и, вероятно, принадлежит где-то еще в приложении. – d3vkit