自定义验证不会触发回滚

时间:2014-11-20 02:27:26

标签: ruby-on-rails validation transactions rails-activerecord

我有一个标准模型和自定义验证

自定义验证可以正常工作,但是......

当我在事务中保存并触发我的自定义验证时,保存失败但事务未回滚。

当我在事务中保存并触发系统验证时,保存失败并且事务被回滚。

我已阅读我可以检查使用save bang然后触发异常来回滚事务但是我更喜欢我的自定义验证功能与系统验证相同而不需要异常处理程序。

我的自定义验证码很简单:

class Family < ActiveRecord::Base
  validates_presence_of :name
  validate :ensure_no_twins

  Private
    def ensure_no_twins
      errors.add(:name, "A sibling by this name already exists") if self.siblings.exists?(name: name) rescue true
    end
end

1 个答案:

答案 0 :(得分:2)

你是否在没有rescue条款的情况下尝试过它?可能会发现它不应该被捕获的例外情况吗?

errors.add(:name, "A sibling by this name already exists") if self.siblings.exists?(name: name)