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

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 Jeffries 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: