我有一个Offer资源。报价有许多表面和服务,表面有许多服务。 在我看来,我有一个表格,显示每个相关的记录,如:
<%- @surfaces = @offer.surfaces %>
<% @surfaces.each do |surface| %>
<tr>
<td><%= surface.size %></td>
<% surface.services.each do |service| %>
<td> <%= service.price %> </td>
<% end %>
<% end %>
</tr>
我希望另一个td显示每对surface.size service.price的总数。 我该如何正确实现? 谢谢!
答案 0 :(得分:1)
您可以使用1 sql查询
执行此操作Surface
.joins(:services)
.where(offer_id: @offer.id)
.sum('services.price * surfaces.size)
答案 1 :(得分:0)
如果我理解你的问题,你需要这样的东西:
def total
tsize, tprice = 0, 0
surfaces = @offer.surfaces
tsize = surfaces.sum(&:size)
surfaces.each { |s| tprice += s.services.sum(&:price) }
(tsize * tprice)
end
答案 2 :(得分:0)
我这样做了:
<%- @surfaces = @offer.surfaces %>
<% @surfaces.each do |surface| %>
<tr>
<td><%= surface.size %></td>
<% surface.services.each do |service| %>
<td> <%= service.price %> </td>
<td> <%= service.price * surface.size %></td>
<% end %>
<% end %>
</tr>
很抱歉提出问题的方式不明确。
答案 3 :(得分:-1)
不确定你的意思是'总',但听起来你想要产品的总和?你的代码背后的意图不明确。
def total
self.surfaces.map do |surface|
surface.map do |service|
surface.size * service.price
end.sum
end.sum
end