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)
可以吗?
你能想到一些更简单、更优雅的解决方案吗?
# 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)