仅未来日期 - Rails 模型中的验证

Jen*_*sky 3 activerecord ruby-on-rails

date我的模型中有字段User。它应该只有未来的日期(从注册时刻开始)。在模型中验证它的最佳方法是什么?

我想这样的事情:

class User < ActiveRecord::Base
  validates :name, presence: true
  validates :date, presence: true
  validate :future_event


  private

  def future_event
    errors.add(:date, "Can't be in the past!") if date < Time.now
  end
end
Run Code Online (Sandbox Code Playgroud)

可以吗?

你能想到一些更简单、更优雅的解决方案吗?

max*_*max 5

# lib/future_validator.rb
class FutureValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    if record[attribute] < Time.now
      record.errors[attribute] << (options[:message] || "can't be in the past!")
    end
  end
end
Run Code Online (Sandbox Code Playgroud)
class User < ActiveRecord::Base
  validates :name, presence: true
  validates :date, presence: true
  validates :future_event, future: true
end
Run Code Online (Sandbox Code Playgroud)