如何从数组中求和?

时间:2014-09-23 15:51:25

标签: ruby-on-rails ruby

我使用rails做了一个应用程序,我在每行上总计得到了一些问题,但是我遇到了错误。

这是我的表格:

|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

这是我的控制器:“app / controllers / 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

这是我的索引视图:“app / 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

请有人帮助我吗?

有什么问题?

将接受所有类型的帮助。

1 个答案:

答案 0 :(得分: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>