我在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
可以吗?
你能想到一些更简单优雅的解决方案吗?
答案 0 :(得分:3)
# 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
class User < ActiveRecord::Base
validates :name, presence: true
validates :date, presence: true
validates :future_event, future: true
end
答案 1 :(得分:1)
validates :start_date,
date: { after: Proc.new { Date.current }, message: 'must be after today' },
on: :create
您可能始终想要调查Date.current
和Date.today
之间的差异 - Date.current
是时区感知的,并将使用您的Rails应用的时区。 Date.today
使用系统时间。如果一个是UTC而一个是东方,可能会有奇怪的差异。