Rails验证类型日期?

The*_*end 6 validation activerecord ruby-on-rails

我想我可能在做梦,但我想我在某个地方读到你可以在保存之前验证对象属性的类型?什么样的validates :transaction_date, :type => Date,这将确保它的约会?

这在Rails 3.2中是否可行?我试图在网上找到这方面的证据.我已经看过rails api了,我正在通过 ActiveRecord的支持.

Pet*_*vin 12

作为其他答案的补充,请注意您可以定义自定义验证器,以便您使用您提出的语法:

validates :transaction_date, :type => Date
Run Code Online (Sandbox Code Playgroud)

如下:

class TypeValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    record.errors.add attribute, (options[:message] || "is not of class #{options[:with]}") unless
      value.class == options[:with]
  end
end
Run Code Online (Sandbox Code Playgroud)

当然,如果要允许子类,可以更改要使用的测试kind_of?.


soc*_*onk 6

Rails不直接支持这个; 它最接近的可能是validates_format_of,或者提供你自己的自定义验证器.

我想你想要的是validates_timeliness gem.它不仅验证某个东西是有效日期,而且您可以指定它应该在今天之前还是之后以及其他各种日期范围检查.