2013-10-24 4 views
0

Я сделал приложение, чтобы суммировать последние значения каждого столбца, но я получаю общую суммуСумма последних значений каждого номера столбца

Здесь мои таблицы

|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 

Я пытаюсь сделать первенствует

|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 %> 

Кто-то может помочь мне в этом вопросе, пожалуйста?

Я действительно ценю помощь

+0

Где находится '@ sum' в вашем контроллере? – zeantsoi

+0

У вас есть несколько страховок, указывающих на один и тот же policy_id, но вы показываете только первую страховую «чистую сумму» – MrYoshiji

+0

@MrYoshiji мое приложение принимает последнее значение .... но в контроллере общая сумма –

ответ

3

Эта линия

@dolar = Insurance.sum(:net_insurance) 

Вычисляет сумму всех записей страхования, то есть 4000 + 6000 + 3000 + 7000.

Вы должны принести последнюю страховку для каждой политики вместо этого:

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

У меня вопрос Stefan , ваш код находится в представлении или контроллере? –

+0

Он переходит в контроллер вместо вашей линии. – Stefan

+0

Спасибо, что сработало, но у меня есть последний вопрос, возможно, мне нужно опубликовать, я пробую что-то вроде этого: @dolares = Insurance.to_a.sum {| i | i.last.net_insurance,: joins =>: policy,: conditions => ['policy.type_money = 1 AND policy.deleted = 0])} –

Смежные вопросы