2014-09-23 59 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