抱歉,如果标题不清楚 - 我不确定如何表达这个问题。
我正在使用 rails 3.2、postgresql 和 ruby 1.9.3。
我有两个模型:订单,它有很多项目。订单有一个针对 items_count 的 counter_cache,并且项目有一个状态。我需要为某个日期范围内的订单查找状态为“in_progress”的项目。
我目前正在使用 Ransack 作为我的搜索表单,起初它很好,因为我主要只是想要订单。然后,我需要获取订单的商品数量,我已经使用 items_count 的订单上的 counter_cache 总和来完成。但现在我需要将该总和限制为仅正在进行的项目。
@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 项目。但我认为可能有更好的方法来处理这个问题。
谢谢!