我使用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