为何坚持下来?ActiveRecord::Rollback 后返回 true 吗?

mwa*_*her 6 activerecord ruby-on-rails simple-form ruby-on-rails-4

例子:

BillingProfile.transaction do
  if @billing_profile.save
    unless SomeService.do_something # returns false and rollback occurs
      raise ActiveRecord::Rollback
    end
  end
end

@billing_profile.persisted? # Still return true, despite rollback
@billing_profile.id # Is set, despite rollback
Run Code Online (Sandbox Code Playgroud)

为什么 @billing_profile 的状态不反映记录已回滚?

这是一个问题,因为记录回滚后无法创建。

mwa*_*her 3

事实证明这是 ActiveRecord (Rails 4) 中的一个错误:https ://github.com/rails/rails/issues/13744

现在已经修复了。