1

我有一个带有自定义验证功能的模型,可以验证日期不是过去的。目前,验证是硬编码的,以检查模型中的单个字段 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
4

1 回答 1

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:Rails 3 中的验证

注意:确保 lib 文件在 config/application.rb 中自动加载,并在添加该文件后重新启动服务器。

于 2012-08-17T20:10:33.877 回答