我们有accepts_nested_attributes_for
dependent: destroy
与_destroy
param arg配合使用。
我们在孩子身上添加了一个验证,并按预期工作。
但是当我们将两者结合起来时,父节点上的保存会抛出未处理的错误,而不是返回false。
class Foo < ActiveRecord::Base
accepts_nested_attributes_for :bars, allow_destroy: true
...
end
class Bar < ActiveRecord::Base
before_destroy :can_do?
def can_do?
unless yeah_sure
errors.add(:base, I18n.t("the.translation"))
false
end
end
...
end
两种情况下bar_spec
测试yeah_sure
,错误为空或存在(并且存在正确的消息)。
当我走过rails部分时,有3个级别的catch,rollback / cleanup,以及active_support和transaction中的释放。
我也尝试在控制器中进行救援,包括方法级别和开始阻止,并且这些都没有捕获错误,这很奇怪。
知道为什么foo.save
会抛出错误而不是返回false?
Rails 4.2.10