我在我的rails 3.0.10应用程序中使用了permanent_records gem,以防止硬删除,并且看起来rails在检查唯一性时忽略了我的默认范围
# user.rb
class User < AR::Base
default_scope where(:deleted_at => nil)
validates_uniqueness_of :email # done by devise
end
在我的rails控制台中尝试通过电子邮件找到已删除的用户,结果为空,但在注册包含已删除电子邮件地址的新帐户时,会导致电子邮件字段出现验证错误。
我的应用程序中的另一个模型也是如此
# group.rb
class Group < AR::Base
default_scope where(:deleted_at => nil)
validates_uniqueness_of :class_name
end
,这与以前的情况相同,删除组然后尝试按类名查找结果为nil,但是当我尝试创建具有已知已删除类名的组时,它将无法通过验证。
有人知道我做错了什么,还是应该为这种行为编写自定义验证器?
答案 0 :(得分:10)
尝试使用deleted_at
确定唯一性检查范围validates_uniqueness_of : email, :scope => :deleted_at
只要deleted_at字段对两者都不同,这可以允许两个具有相同电子邮件值的记录。只要删除时填充了正确的时间戳,我想这就是permanent_records gem,这应该可行。