【发布时间】:2023-04-03 12:54:01
【问题描述】:
我有一个 ActiveRecord 对象,我想阻止它被保存,而无需对模型进行永久验证。您曾经可以使用errors.add 执行类似的操作,但它看起来不再有效了。
user = User.last
user.errors.add :name, "name doesn't rhyme with orange"
user.valid? # => true
user.save # => true
或
user = User.last
user.errors.add :base, "my unique error"
user.valid? # => true
user.save # => true
如何防止用户对象在不修改其模型的情况下保存在 Rails 3.2 中?
【问题讨论】:
-
您不能使用“永久”验证的原因是什么?我认为做你想做的事情是将一些验证逻辑移到模型之外,这不是一个好主意。
-
我经常被问到这个问题,以支持我写的一个 Gem github.com/schneems/wicked 人们想写一行验证,而不会被调用每次对象被保存,仅在向导的上下文中。希望将此信息添加到文档中。也有可能通过元编程直到运行时才知道我们正在更新什么模型。在添加错误时防止 AR 对象被保存的一个很好的通用方法将非常有帮助,并且与 Rails 以前的行为相匹配。不管为什么,如何做的问题仍然存在。
标签: ruby-on-rails ruby ruby-on-rails-3