2014-09-23 67 views
1

我做了一個應用程序使用軌道,我有問題做每一行的總和,但我得到的錯誤。如何求和數組中的值?

這裏我的表:

|policies| 
    |id| |num_policy| 
    1  1000 
    2  1001 
    3  1002 
    4  1003 

|policy_vehicles|  
    |id| |policy_id| |vehicle_id| 
    1   1   1 
    2   1   2 
    3   2   1 
    4   2   3 
    5   3   1 
    6   4   4 
    7   4   2 

|vehicles| 
    |id| |name|  |amount| 
    1 VEHICLE1  8000 
    2 VEHICLE2  8001 
    3 VEHICLE3  8002 
    4 VEHICLE4  8003 

這是我的控制器: 「應用程序/控制器/ policy_controller.rb」

型號:

class PolicyVehicle < ActiveRecord::Base 
    belongs_to :vehicle 
    belongs_to :policy 
end 

class Vehicle < ActiveRecord::Base 
    belongs_to :policy 
    has_many :policy_vehicles 
end 

class Vehicle < ActiveRecord::Base 
    has_many :policy_vehicles 
end 

這是我的索引的觀點:「應用/views/policy/index.html.erb「

<table border="1"> 
    <tr> 
    <td>POLICY ID</td> 
    <td>NUM POLICY</td> 
    </tr> 

<% @policies.each do |policy| %> 
    <tr> 
    <td><%= policy.id %></td> 
    <td><%= policy.num_policy %></td> 
    </tr> 

    <% policy.policy_vehicles.each do |policy_vehicle| %> 
    <tr> 
    <td></td> 
    <td><%= policy_vehicle.vehicle.name %></td> 
    <td><%= policy_vehicle.vehicle.amount %></td> 
    </tr> 
    <% end %> 

    <tr> 
    <td></td> 
    <td>TOTAL</td> 
    <td><%= policy.policy_vehicles.vehicles.sum(:amount) %></td> 
    </tr> 

<% end %> 
</table> 

如果我嘗試:

<%= policy.policy_vehicles.vehicles.sum(:amount) %> 
##### GET THIS ERROR ##### 
undefined method `vehicles' for #<Class:0x7ff4293ac3f0> 

如果我嘗試:

<%= policy.policy_vehicles.vehicle.sum(:amount) %> 
##### GET THIS ERROR ##### 
undefined method `vehicle' for #<Class:0x7ff42ae95a90> 

如果我嘗試:

<%= policy.policy_vehicles.vehicles.collect(&:amount).sum %> 
##### GET THIS ERROR ##### 
undefined method `vehicles' for #<Class:0x7ff429337410> 

如果我嘗試:

<% policy.policy_vehicles.each do |policy_vehicle|%> 
    <%= policy_vehicle.vehicle.sum(:amount) 
<% end %> 
##### GET THIS ERROR ##### 
undefined method `sum' for #<ActiveRecord::Associations::BelongsToAssociation:0x7ff4295dbd60> 

最後我想:

<% policy.policy_vehicles.each do |policy_vehicle|%> 
    <%= policy_vehicle.vehicle.amount.sum 
<% end %> 
##### GET THIS ERROR ##### 
undefined method `sum' for 8000:Fixnum 

我想做這個例子:

enter image description here

請有人可以幫助我嗎?

出了什麼問題?

所有類型的幫助將被接受。

回答

5

你可以這樣做:

class Policy < ActiveRecord::Base 
    has_many :policy_vehicles 
    has_many :vehicles, through: policy_vehicles 
end 

然後:

<tr> 
    <td></td> 
    <td>TOTAL</td> 
    <td><%= policy.vehicles.sum(:amount) %></td> 
</tr> 
+0

奇+1的出色答卷,這也我寫了良好的細節和問題很好解釋的通知:d – 2014-09-23 16:00:51