2014-03-28 34 views
0

我有幾個字段和唯一約束的DataMapper的對象。實際上,這確保了每個日期代碼的每個用戶ID只能創建一條記錄。DataMapper的唯一約束和偏執刪除

class Form 
    include Datamapper::Resource 
    property :id, Serial 
    property :username, String, :required => true, :index => true 
    property :termcode, Integer, :required => true 
    property :status, Enum[:draft, :review, :approved, :denied], :default => :draft 
    ... 

    property :deleted_at, ParanoidDateTime 

    # only one record per user per term code 
    validates_uniqueness_of :username, :scope => [:termcode], :unless => lambda{|r| r.status == :draft } 

end 

問題是,如果我利用偏執刪除功能,唯一性約束將阻止使用相同數據創建附加記錄。例如,如果Sue爲「2015」術語代碼創建記錄並將其刪除,則無法使用相同的術語代碼創建新記錄,因爲偏執功能會將原始記錄保留在數據庫中。

這個模型

爲必填項數據完整性的目的,而且在許多情況下,進行索引以及排序和更好的查詢優化。

我如何利用安全的缺失也讓用戶輸入更多的記錄,但告訴了唯一約束忽略刪除的文件?

回答