Pregunta

I'm using ruby 1.8.7

Hello everybody i'm trying to put a conditional in an array but i'm getting an error. I want

   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

Tables

   |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

And i should have

      |num_policy|  |sum_net_ensurance|
        1234                 3000

Here is my controller

@policies = Policy.find(:all)

Here is my model

class Policy < ActiveRecord::Base
  has_many :insurances
end

class Insurance < ActiveRecord::Base
  belongs_to :policy
end

Here is my view

      <% @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  %>

I'm gettins this error

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

Also i tried

           <% 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  %>

Please somebody can help me please?

I will really appreciate help

¿Fue útil?

Solución

The initial error:

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

Is probably due to the fact that you're calling initial_date on insurances (which is an array)

What you'd want to do is pick the specific insurance you want to work with. So it would be something like this:

policy.insurances.first.initial_date

or

policy.insurances.last.initial_date

Otros consejos

issue with policy.insurances piece of code. you working with relation. you need to work with real insurance object and compare it. for example policy.insurances.first

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top