我好像记得以前 errors 不为空的时候,不能保存的啊
class Aaa
before_save :check_num
def check_num
errors.add(:id, '不能保存就对了')
end
end
Aaa.new.save
=> true
加上 return false
class Aaa
before_save :check_num
def check_num
errors.add(:id, '不能保存就对了')
return false # 看这里
end
end
update:
return false
不能中断后续的 callback,使用 throw :abort
validate
更合适这样虽然也能达到相同的目的,但是不推荐,eg:
class Foo < ApplicationRecord
before_save :foobar
def foobar
errors.add(:base, "I'm a foo")
false
end
end
begin
foo = Foo.new
foo.save!
rescue => ex
puts ex # Output as "Failed to save the record"
end
正确的方法是用 validate
class Foo < ApplicationRecord
validate :foobar
def foobar
errors.add(:base, "I'm a foo")
end
end