2013-09-16 55 views
2

我想我可能是在做梦,但我想我读的地方,你可以验证一个对象的属性的类型,然后再保存它? 像validates :transaction_date, :type => Date,这将确保它的日期?Rails验证类型日期?

这可能在Rails 3.2中吗?我试图在网上找到这个证据。我已经在这里看过rails api,我正在阅读ActiveRecord support

+2

是的http://edgeguides.rubyonrails.org/active_record_validations.html – lurker

回答

4

Rails不直接支持;最接近它可能是validates_format_of,或提供您自己的自定义验证程序。

我想你想要的是宝石。它不仅验证某件事是有效的日期,而且可以指定它应该在今天之前还是之后以及其他各种日期范围检查。

+0

我们使用validates_timeliness,它对我们的目的非常有效。 +1 –

8

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

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?

1

创建了一个新的创业板,以帮助validate types in railsexplanatory blog post存在回答更多的“为什么”它创建的第一个地方。

与此库您的代码将简单为:当一个除了一个Date任何分配给:transaction_date

class Post < ActiveRecord::Base 
    validates_type :transaction_date, :date 
end 

这会抛出异常。