我有三个模型User,Order,OrderItem
class User < ApplicationRecord
has_many :orders
end
class Order < ApplicationRecord
belongs_to :user
has_many :order_items
end
class OrderItem < ApplicationRecord
belongs_to :order
end
OrderItem包含字段金额,我需要以格式
获取特定用户的订单总金额{{1=>23.5},{2=>213.5},{5=>123.5}}
其中1,2,3是订单ID,相应的值是特定订单的订单商品中所有金额的总和。
我需要这种数据来使用chartkick gem
显示图表其中数据必须是任何一种形式,
<%= pie_chart({"Football" => 10, "Basketball" => 5}) %>
<%= pie_chart [["Football", 10], ["Basketball", 5]] %>
请参阅https://github.com/ankane/chartkick#data
所以我需要获得这种数据。
我已经通过
实现了它 result = User.first.orders.select("orders.id, sum(order_items.amount) as charge").left_outer_joins(:order_items)
结果为[{"id"=>206, "charge"=>240000.0}, {"id"=>208, "charge"=>0.0}, {"id"=>210, "charge"=>120000.0}]
但是这可以通过使用循环转换为我提到的格式,但我不想要这种解决方案,我需要知道还有其他任何直接的方法。
答案 0 :(得分:1)
在您的应用程序中尝试以下更改:
- 订购模式
醇>
def to_array
[self.id, self.order_items.sum(:amount)]
end
2.使用以下查询获取结果:
current_user.orders.includes(:order_items).map(&:to_array) ##for single user order
##OR##
Order.all.map(&:to_array) ##for all order
- 这将给出如下结果:
醇>
[[1, "100"]] ## id of your order and total sum of amount.
希望它能正常工作:)