Validations question

I have wrote an validation function for checking that my starting date
should be greater than the current date as like

validate :start_date_should_not_be_greater_than_current_date

def start_date_should_not_be_greater_than_current_date
if self.start_date > Date.today
errors.add(“Whatever”)
end
end

But the problem is that when i left empty the field for start_date when
filling values in form, this error is coming:-

You have a nil object when you didn’t expect it!
The error occurred while evaluating nil.>

I have also wrote some exceptions for my methods but these exceptions
are not catching this error.

Can you guys tell me how to tackle with this situation…

If the field is empty, then self.start_date is nil. Try this:

def start_date_should_not_be_greater_than_current_date
if !self.start_date.nil?
if self.start_date > Date.today
errors.add(“Whatever”)
end
end
end

or something similar

validate :start_date_should_not_be_greater_than_current_date

Personally I’d rename that to:

valid :start_date_before_now

And then I’d do this as the method:

def start_date_before_now
if start_date && start_date > Date.today
errors.add(“Whatever”)
end
end

Just check start_date first. You don’t need the .nil? check as nil
evaluates to false (and any valid date is true). Note, you don’t need
to do
self.start_date when reading a value, only when assigning to it (the
reason
is that reading the value will default to calling the method if no local
variable exists, but writing a value will default to creating a local
variable rather than calling the value= method).

Cheers,

Andy

Andy J. wrote:

validate :start_date_should_not_be_greater_than_current_date

Personally I’d rename that to:

valid :start_date_before_now

And then I’d do this as the method:

def start_date_before_now
if start_date && start_date > Date.today
errors.add(“Whatever”)
end
end

Thanks andy… This worked like a charm … :slight_smile:

Cheers,

Andy