得到每对记录的总数

时间:2014-08-07 10:17:06

标签: ruby-on-rails

我有一个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的总数。 我该如何正确实现? 谢谢!

4 个答案:

答案 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