Jim*_*mmy 10 activerecord ruby-on-rails-3
我在我的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
Run Code Online (Sandbox Code Playgroud)
在我的rails控制台中尝试通过电子邮件找到已删除的用户,结果为null,但在注册具有已删除电子邮件地址的新帐户时,会在电子邮件字段中导致验证错误.
我的应用程序中的另一个模型也是如此
# group.rb
class Group < AR::Base
default_scope where(:deleted_at => nil)
validates_uniqueness_of :class_name
end
Run Code Online (Sandbox Code Playgroud)
并且这与以前的情况相同,删除组然后尝试按类名查找它会导致nil,但是当我尝试创建具有已知已删除类名的组时,它将无法通过验证.
有谁知道我做错了什么或者我应该为这种行为编写自定义验证器?
dex*_*ter 10
尝试使用deleted_at确定唯一性检查范围
validates_uniqueness_of : email, :scope => :deleted_at
Run Code Online (Sandbox Code Playgroud)
只要deleted_at字段对于两者都不同,这可以允许具有相同电子邮件值的两个记录.只要删除at填充了正确的时间戳,我想这就是permanent_records gem,这应该可行.