我有一个带有自定义验证功能的模型,用于验证日期不是过去的日期。目前,验证是硬编码的,用于检查模型中的单个字段selected_date。我如何重构验证,以便我可以将参数传递给自定义验证,以便我可以测试2个字段?
class Appointment < ActiveRecord::Base
attr_accessible :selected_date, :alternate_date
validates_presence_of :selected_date
validate :validate_date
def validate_date
if selected_date < Date.today
errors.add(:selected_date, 'Date has passed')
end
end
end
答案 0 :(得分:1)
创建文件lib / future_validator.rb:
class FutureValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
if value < Date.today
object.errors[attribute] << "has passed"
end
end
end
在你的模特中:
validates :selected_date, presence: true, future: true
validates :other_date, presence: true, future: true
请参阅此RailsCast:Validations in Rails 3
注意:确保在config / application.rb中自动加载lib文件,并在添加该文件后重新启动服务器。