0

抱歉,如果标题不清楚 - 我不确定如何表达这个问题。

我正在使用 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 项目。但我认为可能有更好的方法来处理这个问题。

谢谢!

4

1 回答 1

1

你可以试试这个:

@search = Order.order("orders.created_at desc").includes(:items).where("items.status = 'in_progress'").search(params[:q])
于 2013-05-03T03:04:14.013 回答