ActiveRecord事务不回滚

时间:2012-10-30 21:16:48

标签: ruby-on-rails-3 activerecord mass-assignment

我是ActiveRecord交易的新手。在下面的代码中,第一个update_attributes会导致警告:无法批量分配受保护的属性:account_type_cdx,这没关系。但我很惊讶下一行self.update_attributes!(::purchase => true)被执行并存储在数据库中。我期待它回到ROLLBACK因为第一个失败了。

我一定错过了什么...... 任何提示?

def complete_purchase(current_user_id, plan_name)
    Rails.logger.debug "COMPLETE PURCHASE"
    user = User.find(current_user_id)
    ActiveRecord::Base.transaction do
        user.update_attributes!(:account_type_cdx => plan_name.to_sym)
        self.update_attributes!(:purchased => true)
    end
end

我按照这篇文章中的建议:http://markdaggett.com/blog/2011/12/01/transactions-in-rails/

感谢。

1 个答案:

答案 0 :(得分:2)

Rails 忽略那些未在attr_accessible类调用中明确列出的记录(因此是第一次更新警告)。它不会使事务失败,这就是你达到(并完成)第二个update_attributes的原因!通常