0

我正在使用红宝石 1.8.7

大家好,我正在尝试将条件放入数组中,但出现错误。我想

   if policy.date_ini >= insurance.initial_date then
      do sum of all net_ensurance where date_ini >= initial_date
   else
      show the last insurance
   end

   |policies|
     |id|   |date_ini|  |num_policy|
      1      2013-02-30      1234

   |insurances|
     |id|  |policy_id|   |initial_date|   |net_ensurance|
      1       1            2013-03-30         1000
      2       1            2013-02-30         2000 
      3       1            2012-12-05         5000

我应该有

      |num_policy|  |sum_net_ensurance|
        1234                 3000

这是我的控制器

@policies = Policy.find(:all)

这是我的模型

class Policy < ActiveRecord::Base
  has_many :insurances
end

class Insurance < ActiveRecord::Base
  belongs_to :policy
end

这是我的看法

      <% @policies.each do |policy| %>

           <%= policy.num_policy %>

           <% if policy.date_ini >= policy.insurances.initial_date %>
              <%= policy.insurances.sum(:net_insurance)  %>
           <% else %>
              <% policy.insurances.last(1).each do |insurance| %>          
                <%= insurance.net_insurance %>
              <% end %>
           <% end  %>

      <% end  %>

我遇到了这个错误

undefined method `initial_date' for #<Class:0x7f30aa1ea398>

我也试过

           <% if policy.date_ini >= policy.insurances.try(:initial_date) %>
              <%= policy.insurances.sum(:net_insurance)  %>
           <% else %>
              <% policy.insurances.last(1).each do |insurance| %>          
                <%= insurance.net_insurance %>
              <% end %>
           <% end  %>

请有人可以帮助我吗?

我将非常感谢帮助

4

2 回答 2

1

最初的错误:

undefined method `initial_date' for #<Class:0x7f30aa1ea398>

可能是由于您正在调用initial_dateinsurances这是一个数组)

您要做的是选择您想要使用的特定保险。所以它会是这样的:

policy.insurances.first.initial_date

或者

policy.insurances.last.initial_date
于 2013-11-06T17:08:48.353 回答
0

policy.insurances一段代码的问题。你和关系一起工作。您需要使用真实的保险对象并进行比较。例如 policy.insurances.first

于 2013-11-06T17:10:19.783 回答