首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用acts_as_paranoid插件进行软删除--验证呢?

使用acts_as_paranoid插件进行软删除--验证呢?
EN

Stack Overflow用户
提问于 2011-02-10 21:46:45
回答 3查看 3.7K关注 0票数 3

我期待着尝试使用acts_as_paranoid插件软删除记录。我之前在db中使用了一个标志来管理它。我知道这个插件将从搜索中省略一条记录,并查找该记录是否被软删除。我想知道的是,我是否像validates_uniqueness_of :email一样在模型中进行了验证,并且我删除(软删除)了电子邮件为‘validates_uniqueness_of :email@gmail.com’的记录。现在,当我尝试创建具有相同电子邮件的新用户时,验证是否会起作用,并阻止创建新记录。或者,它会像查找一样忽略软删除的记录吗?(当然,我希望这样做。)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-08 20:44:27

acts_as_paranoid不会重新实现validates_uniqueness_of,因此如果您已经(软)删除了带有电子邮件'prince@gmail.com‘的记录,则无法使用相同的电子邮件创建新记录。

解决这个问题的简单方法是向validates_uniqueness_of添加一个作用域:

代码语言:javascript
运行
复制
validates_uniqueness_of :email, :scope => :deleted_at

这样,您可以使用电子邮件'prince@gmail.com‘删除任意数量的(软)记录,同时仍然使用相同的电子邮件创建新记录。

票数 14
EN

Stack Overflow用户

发布于 2011-02-20 03:52:53

从我们的测试中,acts_as_paranoid的修补确实会影响删除,因此您将最终得到两条记录。从网络上的大多数对话来看,这可能是你所期望的。

在我们的例子中,我们不希望这样。当我们使用相同的电子邮件创建另一个用户时,我们想要“取消删除”第一个用户,我们希望验证能够帮助我们做到这一点。事实证明,我们无法找到一种方法来做我们想做的事情。在这种情况下,我们最终没有使用acts_as_paranoid,但我们仍然在考虑返回。

我们确实找到了一个补丁,它允许将标志传递给验证(:with_deleted => true),这样您就可以显式地控制这一点。这似乎是一个好主意,但我们决定不去追求它。不幸的是,这个问题突出了这种方法有点“泄漏抽象”,必须小心使用。

票数 2
EN

Stack Overflow用户

发布于 2012-11-21 04:55:36

如果您正在使用"rails3_acts_as_paranoid“,则已针对上述问题进行了规定,

ActiveRecord内置的唯一性验证不会考虑ActsAsParanoid删除的记录。如果只想检查未删除记录中的唯一性,请在模型中使用宏validates_as_paranoid。然后,使用validates_uniqueness_of_without_deleted而不是validates_uniqueness_of。这将防止删除的记录计入唯一性检查。

需要指定以下方式:

代码语言:javascript
运行
复制
acts_as_paranoid
validates_as_paranoid
validates_uniqueness_of_without_deleted :name
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4957845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档