Rails 4.0自定义验证程序不起作用

时间:2013-11-23 18:38:46

标签: ruby-on-rails-4 customvalidator

我正在尝试验证Rails 4应用程序中的某些日期,但它无效。

我查看了许多类似的代码示例,例如Same custom validation for several fields in Rails和此http://railscasts.com/episodes/211-validations-in-rails-3。 (和其他更复杂的)。我不明白为什么我的例子不起作用。试图找到问题,我已经删除了实际的验证代码,并留下了一个存根,因为验证似乎没有运行,这似乎是基本问题(或至少是第一个问题)。

以下是验证器中的代码(位于app / validators / custom_date_validator.rb

中)
class CustomDateValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    puts "Custom validator was called"
    record.errors[attribute] << "Date Not Valid" unless false
  end
end

以下是模型中的代码:

class CaseInformation < ActiveRecord::Base
  include ApplicationHelper
    validates :started, :custom_date => true

错误消息是:

argument out of range
Extracted source (around line #104): 
respond_to do |format|
104 if ( @case_information.update_attributes(params[:case_information]) && @case_information.update_attributes(params[:law_guardians]) )
format.html { redirect_to @case_information, notice: 'Case information was successfully updated.' }
format.json { head :no_content }

错误是(我认为)故意的,我输入了“1/123/2012”的日期,但验证器没有抓住它。嗯,其实我去掉了所有的验证码,并有(我认为)验证写入日志,因为它似乎并没有验证甚至运行,至少,没有什么显示它运行在日志中。

我知道正在找到验证器代码,因为在模型中,如果我更改了验证名称,我会收到一个无法找到验证的错误。

真的很愚蠢的菜鸟问题我相信,你的耐心是值得赞赏的。

感谢。

1 个答案:

答案 0 :(得分:0)

在你的验证器运行之前确实失败了 - “参数超出范围”错误是当你在一个不存在的日期调用Time.parse时会发生的错误。在irb:

2.0.0p247 :004 > require 'time'
=> true
2.0.0p247 :005 > Time.parse("1/123/2012")
ArgumentError: argument out of range

我认为started属于datetimetimestamp属性,对吗?在运行任何验证之前,Rails会尝试将字符串从params哈希转换为其类型