从许多用户的所有产品中获取总价
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
您可以使用带有 SUM
和 GROUP BY
的单个 SQL 查询来获取分组值的总和。在 Rails 中,这看起来像这样:
@sums = Order.group_by(:user_id).sum(:price)
# {1 => 2500, 2 => 4700, ...}
在您看来,您可以使用用户 ID 作为键来获取相应用户的总和,例如有了这个(假设你在 driver
变量中有当前的驱动程序/用户):
<%= @sums[driver.id] %>
我有问题
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 |
您可以使用带有 SUM
和 GROUP BY
的单个 SQL 查询来获取分组值的总和。在 Rails 中,这看起来像这样:
@sums = Order.group_by(:user_id).sum(:price)
# {1 => 2500, 2 => 4700, ...}
在您看来,您可以使用用户 ID 作为键来获取相应用户的总和,例如有了这个(假设你在 driver
变量中有当前的驱动程序/用户):
<%= @sums[driver.id] %>