我是 ActiveRecord 事务的新手。在下面的代码中,第一个 update_attributes 导致警告:无法批量分配受保护的属性:account_type_cdx,这没关系。但令我惊讶的是,下一行 self.update_attributes!(:purchased => true) 被执行并存储在数据库中。我期待它回滚,因为第一个失败了。
我一定是遗漏了什么……有什么提示吗?
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/
谢谢。