我只想在对象的特定字段合法时才将对象保存在db中。同样,我在Rails应用程序的模型类中创建了一个before_create钩子。如何添加条件保存?
如果不保存对象,我试图返回false。但是,它不起作用,并且该对象仍在保存/
答案 0 :(得分:0)
对于具有字符串列foo
的Test类,其值必须为“ bar”或“ baz”:
class Test < ApplicationRecord
validate :foo_check
def foo_check
if ['bar', 'baz'].exclude? foo
errors.add(:foo, "has to be either 'bar' or 'baz'")
end
end
请注意,对于这种特定情况,已经有一种更简单的方法可以做到这一点,即:
validates :foo, inclusion: { in: %w(bar baz)
(请注意,%w(bar baz)
与['bar', 'baz']
等效)
我只做了自定义验证,以表明您可以创建一个可以检查基本上所有内容的验证。
以下是自定义验证的指南: https://guides.rubyonrails.org/active_record_validations.html#custom-methods