How to validate dates in Rails 4

During the past few days I’ve been busy looking for existing gems doing date validation in Rails 4. I’ve tried a couple of the most famous, but they were compatible with Rails only up to 3.2, so I decided to write a solution myself.

It works fine for me. I’m not going to convert it to a gem because I don’t have time to learn how to right now. If you want to help, you’re welcome.

Docs

It’s all very straightforward.

  • The validator symbol is :date.
  • The validator really does nothing if you don’t provide any options…
  • Supported options are :after, :before, :on_or_after, and :on_or_before, plus :message.
  • If the message is not provided a fine default one is used instead.
  • Values of supported options can be date-castable objects, lambdas, or symbols.
  • Symbols must be method names of the validating object or its class.
  • Values are computed (if needed) and converted to date on each validation.

Code

Here is my DateValidator class, to be put into the app/validators folder.

{[ .date-validator | 1.hljs(=ruby=) ]}

Here is an example of how to use it into a model.

{[ .user-profile | 1.hljs(=ruby=) ]}

Here is the form helper snippet (only what differs from scaffolding).

{[ .form-helper | 1.hilite(=html=) ]}

Here is the controller snippet (only what differs from scaffolding).

{[ .controller | 1.hljs(=ruby=) ]}

 

11 Replies to “How to validate dates in Rails 4”

  1. @Emil, it doesn’t work your way because when the lambda is called, my code doesn’t pass any argument to it. You should be able to get what you mean by means of an instance method, though.

  2. Shouldn’t we also check for valid date? Something like: Date.parse(value.to_s) rescue record.errors[attribute] << 'must be a valid date' ?

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.