3

我是 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/

谢谢。

4

1 回答 1

2

Rails会忽略那些没有在attr_accessible类调用中明确列出的记录(因此是第一个更新警告)。它不会使交易失败,这就是为什么您要达到(并完成)第二个 update_attributes 的原因!一般。

于 2012-10-30T21:30:05.060 回答