0

大家好。

我正在尝试对我视图中不同表的 2 列(amount_ensure 和 vehicle_Value)求和

TABLES
|POLICIES|
 |id|   |amount_ensure|

|POLICY_VEHICLES| 
 |id|   |policy_id|

|VEHICLES|
 |Id|   |vehicle_value|

这是我的控制器

def view_policy    
   @obj_policy = Policy.find(params[:id])
end

这是我的模型

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

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

class Vehicle < ActiveRecord::Base
  belongs_to :policy
  has_many :policy_vehicles
  has_many :policies, :through => :policy_vehicles
end

这是我的观点,当在我的部分视图中 @obj_policy.vehicle 为空时,只显示 amount_ensure 但当有值时做 SUM(但从我的部分视图来看是一个数组)

<% if @obj_policy.vehicles.empty? %> 
  Sum:
  <%= @obj_policy.amount_ensure %>           
<% else %>
  Sum:
  <%= @obj_policy.amount_ensure + @obj_policy.vehicles.vehicle_value.to_i %>           
<% end %>

<%= render :partial=>"vehicles" %>

我的部分观点

<% @obj_policy.vehicles.each do |vehicle| %>
   <%=  vehicle.vehicle_value %>
<% end %>

我该如何解决这个问题?

我会很感激帮助。

4

2 回答 2

1

这应该工作

<% else %>
  Sum:
  <%= @obj_policy.amount_ensure + @obj_policy.vehicles.collect(&:vehicle_value).sum %>           
<% end %>

@obj_policy.vehicles.collect(&:vehicle_value).sum当车辆数组为空时将为 0

于 2013-10-16T20:35:29.917 回答
0

实际上,让 SQL 处理它会更好。

<%= @obj_policy.amount_ensure + @obj_policy.vehicles.sum(:vehicle_value) %>

您还可以将其包装到实例方法中:

class Policy
   def total_value
     amount_ensure + vehicles.sum(:vehicle_value) # I don't remember if `to_i` is necessary here in case of empty collection, try it out
   end
end

也可以编写一个自定义的 SQL 查询来在数据库中进行求和。在提出原始解决方案的情况下,它会获取所有可能根本不需要的所有字段的车辆。尽量将 SQL 用于聚合作业。

于 2013-10-16T21:06:45.710 回答