从许多用户的所有产品中获取总价

Take total price from all product for many users

我有问题

Model Driver 具有类似 has_many: orders

的关联
class Driver < User
   has_many :orders
end

订单有 belongs_to :user

class Order < ActiveRecord::Base
   belongs_to :user
end

Order 有类似 price

的列

我的问题是,我想通过 table 显示所有驱动程序 第一列将是 first_name,接下来是 last_name, 我想显示每个用户的总价。价格将通过用户所有订单的总和来计算, 问题是 n+1,我如何显示每个用户的总价,而不向 DB 发送单独的请求

索引页示例

first_name. last_name Price
Arian Lain 2500
Brain Kokun 4700

您可以使用带有 SUMGROUP BY 的单个 SQL 查询来获取分组值的总和。在 Rails 中,这看起来像这样:

@sums = Order.group_by(:user_id).sum(:price)
# {1 => 2500, 2 => 4700, ...}

在您看来,您可以使用用户 ID 作为键来获取相应用户的总和,例如有了这个(假设你在 driver 变量中有当前的驱动程序/用户):

<%= @sums[driver.id] %>