Question

I have a Rails app, I am using Mongoid driver to map to my Mongodb database. I would like to allow users to not specify their date of birth if they do not want to. If they do specify the date I would like the validation of the applicable years to apply.

I have the code below in my model:

field :date_of_birth, type: Date

validates_date :date_of_birth, :before => lambda { 6.years.ago }, :before_message => 'must be at least 6 years old',
                 :on_or_after => lambda { 70.years.ago }, :on_or_after_message => 'please enter a valid date of birth'

How do I allow users to save a blank date that passes validation and saves to the database. I get the following error when I pass a blank date with the current code:

Date of birth translation missing: attributes.date_of_birth.invalid_date

Was it helpful?

Solution

Like this:

validates_date :date_of_birth,
  :unless => 'date_of_birth.blank?',
  :before => lambda { 6.years.ago },
  :before_message => 'must be at least 6 years old',
  :on_or_after => lambda { 70.years.ago },
  :on_or_after_message => 'please enter a valid date of birth'

And you probably shouldn't block people over 70 years old like that :)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top