Search code examples
ruby-on-railsrubyvalidationrails-activerecord

How to validate the date such that it is after today in Rails?


I have an Active Record model that contains attributes: expiry_date. How do I go about validating it such that it is after today(present date at that time)? I am totally new to Rails and ruby and I couldn't find a similar question answering exactly this?

I am using Rails 3.1.3 and ruby 1.8.7


Solution

  • Your question is (almost) exactly answered in the Rails guides.

    Here's the example code they give. This class validates that the date is in the past, while your question is how to validate that the date is in the future, but adapting it should be pretty easy:

    class Invoice < ActiveRecord::Base
      validate :expiration_date_cannot_be_in_the_past
    
      def expiration_date_cannot_be_in_the_past
        if expiration_date.present? && expiration_date < Date.today
          errors.add(:expiration_date, "can't be in the past")
        end
      end    
    end