Railsvalidation类型日期?
我想我可能在做梦,但我想我在某处读到你可以在保存之前validation对象属性的类型? 类似validates :transaction_date, :type => Date
,这将确保它的日期?
这在Rails 3.2中是否可行? 我试图在网上找到这方面的证据。 我已经看过rails api了 ,我正在通过ActiveRecord的支持 。
Rails不直接支持这个; 它最接近的可能是validates_format_of,或提供自己的自定义validation器。
我想你想要的是validates_timeliness gem。 它不仅validation某个东西是有效日期,而且您可以指定它应该在今天之前还是之后以及其他各种日期范围检查。
作为其他答案的补充,请注意您可以定义自定义validation器,以便您使用您提出的语法:
validates :transaction_date, :type => Date
如下:
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
当然,如果要允许子类,可以更改测试以使用kind_of?
。
已经创建了一个新的gem来帮助validationrails中的类型,并且存在一个解释性的博客文章 ,以回答更多它首先创建的“为什么”。
使用此库,您的代码很简单:
class Post < ActiveRecord::Base validates_type :transaction_date, :date end
当除了aa Date
之外的任何内容被分配给:transaction_date
时,这将抛出exception。