【问题标题】:validate ActiveRecord field with especific class使用特定类验证 ActiveRecord 字段
【发布时间】:2013-03-05 18:27:17
【问题描述】:

我想验证我的字段是否来自特定的类。

具体例子。我有一个必须按天唯一的模型。所以,我插入一个验证

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

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

我应该如何解决它?

提前致谢。

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

我如何禁止某人做 MyModel::create my_date_field: 4

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

我完全迷路了=\

【问题讨论】:

  • 好吧,我使用 before_validation 解决了这个问题,我在其中手动进行了解析,或者添加了一个错误。但我会保留这个问题,等待更好的答案。不过,审核可以删除它。

标签: ruby-on-rails validation rails-activerecord


【解决方案1】:

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

【讨论】:

  • 确实是一种解决方法。但是没有助手,比如force_type :my_field, SomeClass?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
相关资源
最近更新 更多