Rails 3验证唯一性忽略模型上的默认范围

时间:2011-08-27 04:09:16

标签: ruby-on-rails-3 activerecord

我在我的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,但是当我尝试创建具有已知已删除类名的组时,它将无法通过验证。

有人知道我做错了什么,还是应该为这种行为编写自定义验证器?

1 个答案:

答案 0 :(得分:10)

尝试使用deleted_at

确定唯一性检查范围
validates_uniqueness_of : email, :scope => :deleted_at

只要deleted_at字段对两者都不同,这可以允许两个具有相同电子邮件值的记录。只要删除时填充了正确的时间戳,我想这就是permanent_records gem,这应该可行。