2013-03-05 88 views
0

我想验证我的字段来自特定类别。验证特定类别的ActiveRecord字段

具体的例子。我有一个模型,必须由独特的到天。所以,我插入验证

validates :my_date_field, uniqueness: {scope: [:scope_one, :scope_two]} 

如果我用Date创建我的记录,验证工作正常。但是,如果我用Time创建我的记录(我的测试使用Time :: now),它会将其解析为日期,但不会触发验证。

我该如何解决?

在此先感谢。

- 编辑 - 一个相关的问题:

我如何禁止别人做 为MyModel ::创建my_date_field:4

?它从active_record传递validate_presence,从迁移中传递null:false,并在我的date_field中保存一个丑陋的4。

我在这里完全失去了= \

+0

那么,我解决了它使用before_validation我手动进行解析,或添加一个错误。 但我会保持这个问题,等待更好的答案。尽管如此,审核可以删除它。 – Cristopher 2013-03-05 19:17:10

回答

1

的ActiveRecord将类型转换你的价值观,以它认为任何类型是适合于基础数据库字段。不过,您仍然可以通过my_date_field_before_type_cast访问原始类型。每个属性都存在*_before_type_cast访问器。在那里你可以检查课程或做其他可能需要的转换。这些也可以在自定义验证方法中使用。

+0

解决方法的确如此。但是没有帮手,比如说'force_type:my_field,SomeClass'? – Cristopher 2013-03-28 18:16:01