如何使用validates_uniqueness_of与条件



我使用ruby的datamapper。我想在将新数据集插入表之前验证它。我的验证标准是…

1)只在字段'name'不存在时插入。

2)如果具有相同'name'的记录已经有'submit_date'(非null),则不插入

我看dm验证,我认为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
有什么建议吗?

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

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 

相关内容

  • 没有找到相关文章

最新更新