为什么我不能在Rails中重用自定义验证器?

时间:2013-06-27 07:36:43

标签: ruby-on-rails ruby-on-rails-3

我在lib / validators / past_validator.rb中有一个自定义验证器,如下所示:

class PastValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    (record.errors[attribute] << "must be in the past") if value >= Date.today
  end
end

我在application.rb中要求这样:

config.autoload_paths += %W(#{config_root}/lib/validators)

我想在两个模型用户和照片中使用此验证器。用户有生日(日期),照片的日期属性为“taken_on”,两者都必须是过去的。

在user.rb中,我有以下一行:

validates :birthday, allow_nil: true, past: true

生日的验证就像魅力一样。

在photo.rb中:

def self.new_photo(params)
  photo = new(taken_on: (Date.parse params[:taken_on]) ) 

  photo
end

validates :taken_on, presence: true, past: true

如果我发表评论“过去:真实”,这也有效,但如果没有,我会得到NoM​​ethodError。回溯告诉我,该值未在验证器中设置,因此解释器认为值必须是一个方法并给我一个NoMethodError。但为什么没有设定价值?

我已经尝试在photo.rb中执行以下操作:

def self.new_photo(params)
  date = Date.parse params[:taken_on]
  p date # Gives me a correct instance of Date
  photo = new(taken_on: date)

  photo
end

validates :taken_on, presence: true, past: true, on: :create

奇怪的是,当我拍摄照片时,验证已经发生了。

0 个答案:

没有答案