汇总每个列问题的最后一个值

时间:2013-10-24 20:04:30

标签: ruby-on-rails ruby ruby-on-rails-2

我做了一个应用程序来总结每列的最后值,但我得到总和

这是我的表格

|policies|
 |id|  |num_policy|
   1      1234
   2      4567 

|insurances|
 |id|  |id_policy| |net_insurance| 
  1          1      4000
  2          1      6000
  3          2      3000 
  4          2      7000 

我正在尝试使用excel

|id|   |num_policy|   |net_insurance|
 1        1234           4000
 2        4567           7000

          sum =        11000   

这是我的控制器

class PolicyController < ApplicationController
    def generate_print

      @policies= Policy.find(:all)
      @dolar = Insurance.sum(:net_insurance)

      respond_to do |format|
         format.html
         format.xls { send_data render_to_string(:partial=>"report_by_sum"),  :filename => "Report_#{Date.today}.xls" }
      end

    end
end

这是我的模特

class Policy < ActiveRecord::Base
  has_many :insurances
end

class Insurance < ActiveRecord::Base
  belongs_to :policy
  has_many :insurance_financing_details
end

这是我的观点,显示每项政策的最后保险

<% @policies.each do |policy| %>
    <%= policy.num_policy %>
    <% policy.insurances.last(1).each do |insurance| %>          
        <%= insurance.net_insurance %>
    <% end %>
<% end %>

<%= link_to "Export Excel",{:controller=>"policy",:action=>"generate_print" ,:format=>"xls"}  %>

这是我的部分观点,我试图总结它应该显示“11000”,但我得到“20000”

 #   _report_by_sum.erb
<%= @dolar %>

有人可以帮我解决这个问题吗?

我真的很感激帮助

1 个答案:

答案 0 :(得分:3)

这一行

@dolar = Insurance.sum(:net_insurance)

计算所有保险条目的总和,即4000 + 6000 + 3000 + 7000。

您必须为每个政策取得最后一次保险:

@dolar = @policies.to_a.sum { |policy| policy.insurances.last.net_insurance }