【问题标题】:Custom validation not triggering rollback自定义验证不触发回滚
【发布时间】:2014-11-20 02:27:26
【问题描述】:

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

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

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

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

我已阅读我可以检查使用保存爆炸然后触发异常以回滚事务但是我希望我的自定义验证与系统验证功能相同而不需要异常处理程序。

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

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

【问题讨论】:

  • 请将代码贴在您拨打ensure_no_twins的地方。

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


【解决方案1】:

你试过没有rescue 子句吗?它可能正在捕获它不应该捕获的异常?

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

【讨论】:

  • 异常处理程序用于捕获 NoMethodError。根据以下文章,我想我会将处理程序缩小到:rescue => e daniel.fone.net.nz/blog/2013/05/28/… 我不知道如何专门为 NoMethodError 制作它,但它现在可以工作了 :)
  • 如果遇到 NoMethodError,可以使用 try - self.siblings.try(:exists?,{name: name})
猜你喜欢
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多