很抱歉,如果标题不清楚 - 我不确定如何说出这个问题。
我正在使用rails 3.2,postgresql和ruby 1.9.3。
我有两个模型:Order,它有很多项。订单有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'
的总和。我倾向于循环我已经拥有的订单,并使用Ruby而不是SQL手动添加in_progress项。但我认为可能有更好的方法来解决这个问题。
谢谢!
答案 0 :(得分:1)
你可以试试这个:
@search = Order.order("orders.created_at desc").includes(:items).where("items.status = 'in_progress'").search(params[:q])