我刚刚将 Rails 升级到 2.3.4,我在验证中注意到了这一点: 假设我有一个简单的模型公司,它有一个名字。没什么。 我想运行我自己的验证:
class Company < ActiveRecord::Base
validate :something
def something
false
end
end
在这种情况下保存模型实际上是有效的。 如果我重写 validate() 并返回 false,也会发生同样的事情。 我在一个更复杂的模型中注意到了这一点,其中我的验证返回 false,但该对象仍在保存......我在一个基本上空的模型中尝试了它并应用了相同的东西。我缺少什么新的做法吗?在我的一些旧的 Rails 代码中似乎并非如此。
最佳答案
当您使用validate
方法时,就会执行验证。然而,rails 并不依赖于返回值。
它取决于是否存在验证错误。因此,当您的模型未验证时,您应该添加错误。
def something
errors.add(:field, 'error message')
end
或者,如果错误与字段无关:
def something
errors.add(:base, 'error message')
end
那么您的模型将不会被保存,因为存在错误。
关于ruby-on-rails - 在 Rails 中调用自定义验证方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1611887/