我想验证一个18岁以上的生日属性

时间:2016-11-07 03:08:48

标签: ruby-on-rails devise

我目前正在使用设计宝石在轨道上的ruby上进行编程。为我的用户添加了生日,我试图验证超过18岁的用户。我试过这个,但它没有用。

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
    def is_older?()
        (DateTime.now - :birth_date).to_i >= 6570

    end
  validates :birth_date, :presence =>{:if => {:is_older? =>{:message => 'You should be over 18 years old.'}}}



  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

end

我不知道:是否存在,但我添加了它,因此它不会显示任何错误。基本上我是尝试使用if语句作为验证器,如果可能的话,这将检查用户尝试注册的出生日期与今天的日期之间的差异是否高于18年。 非常感谢!

1 个答案:

答案 0 :(得分:3)

您应该单独验证在线状态和年龄,并且您可以使用ActiveSupport::Duration来获得更好的日期语法(例如18.years.ago):

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  validates :birth_date, :presence => true
  validate :validate_age

  private

  def validate_age
      if birth_date.present? && birth_date > 18.years.ago.to_d
          errors.add(:birth_date, 'You should be over 18 years old.')
      end
  end
end