我有一个带有几个字段和唯一约束的数据映射器对象。实际上,这确保了每个用户 ID 每个日期代码只能创建一条记录。
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”学期代码创建一条记录并将其删除,则她将无法创建具有相同学期代码的新记录,因为偏执功能会将原始记录保留在数据库中。
出于数据完整性目的,此模型的字段是必需的,并且在许多情况下也需要建立索引,以便进行排序和更好的查询优化。
如何利用安全删除,同时允许用户输入更多记录,但告诉唯一约束忽略已删除的记录?
最佳答案
您应该创建一个方法并在创建之前和保存之前注册它 as a hook .
关于mysql - Datamapper 独特约束和偏执删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22720930/