【发布时间】:2014-05-02 08:31:07
【问题描述】:
我正在使用带有 ruby 的数据映射器。我想在将新数据集插入表之前对其进行验证。我的验证标准是..
1) 仅当字段“名称”不存在时才插入。
2) 如果具有相同'name'的记录已经有'submit_date'(非空),则不插入。
我查看了 dm-validations,我认为 validates_uniqueness_of 应该会有所帮助。 我尝试以下代码
validates_uniqueness_of :submit_date, :scope => :name
但结果并不如我所愿。相同的名字 ' 仍然添加到表中,而其现有的 'name' 已经具有 'submit_date' 值。
id|name|submit_date|
1 |LotA|Null
2 |LotB|2014-05-02
3 |LotB|Null <--- This record should not be added because LotB is existing and already submit
4 |LotC|Null
有什么建议吗?
【问题讨论】:
-
您也可以创建一个钩子方法并使用
before: hook_method_name来处理这个问题.. -
您正在验证
submit_date基于name是唯一的,因为与2014-05-02相比,nil是唯一的,这将通过。如果初始记录有nilsubmit_date,你想发生什么?要更新吗? -
@engineersmnky 是的,我希望 submit_date 对于添加的任何新记录都为零。当名称(比如说 LotB)实际提交时,我希望此表中 LotB 的记录更新 submit_date 的值。但我想阻止(不希望)将重复的 LotB 添加到表中。
标签: ruby validates-uniqueness-of