0

我正在使用带有红宝石的数据映射器。我想在将新数据集插入表之前对其进行验证。我的验证标准是..

1) 仅当字段“名称”不存在时才插入。

2) 如果具有相同“名称”的记录已经有“提交日期”(非空),则不插入。

我查看了 dm-validations,我认为 validates_uniqueness_of 应该会有所帮助。我尝试以下代码

validates_uniqueness_of :submit_date, :scope => :name

但结果并不如我所料。相同的 '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

有什么建议吗?

4

1 回答 1

0

如果您的意图是首先验证名称的唯一性,那么您可以这样做

validates :name, presence: true, uniqueness:{case_sensitive:false}
validate :exists_with_submit_date

def exists_with_submit_date
    existing_record = self.find_by_name(name) 
    if existing_record && existing_record.submit_date
      errors.add(:name, "all ready exists with submit_date #{existing_record.submit_date}")
    end
end 
于 2014-05-05T13:13:31.533 回答