整个宁静的动词是在一个单一的包容性交易?也就是说,如果我在处理UPDATE,DELETE或CREATE操作的任何时候在验证或回调中引发错误,那么在之前的回调中可能执行的每个数据库操作也会回滚?简单地说,在任何回调或验证中引发一个错误会导致数据库中该动词操作完全没有发生任何变化?什么时候交易开始时使用(宁静)轨道
6
A
回答
3
整个宁静的动词是在一个单一的包容性交易下吗?
没有
,如果我在一个更新的处理任何一点提高在验证或回调一个错误,删除或创建操作,就是我可以在以前已执行的每一个数据库操作回调也回滚了?
号
做任何回调或验证使抚养错误它使得在没有变化的数据库中该动词的动作发生?
号
如果你希望这个行为,你可以明确地建立在你的控制器交易(查看其他用户提供的例子),或使用around_filter
的行为附加到你所有的宁静行动。
1
一些方法(创建,销毁)立即转到数据库。交易通过使用ActiveRecord的派生类的交易方法如下发生:(这个例子是多个数据库对于一个单一的数据库,你只需要一个事务。)
Student.transaction do
Course.transaction do
course.enroll(student)
student.units += course.units
end
end
然后,您可以回滚在这些事务上,事务内抛出的异常在回滚之后传播。
这取决于具有交易的数据库。
注意:保存和销毁包装在交易中。
4
默认情况下,在事务内没有写入数据库代码,您需要告诉它在代码中执行该操作。
def create
Model.transaction do
Model.create!(params[:model])
Model.association.create!(params[:association])
end
rescue ActiveRecord::RecordNotSaved, ActiveRecord::RecordInvalid
flash[:notice] = "That record could not be saved."
render :action => "new"
end
使用#create!方法将尝试保存记录,如果它们失败,它们将引发异常,然后回滚已在事务块内执行的任何代码。
如果您不拯救该行为,您将被重定向到(我认为)您公共目录中的405.html(如果存在)。
相关问题
- 1. 什么时候应该使用火力地堡交易
- 2. 不知道什么时候使用抽象属性,什么时候不使用
- 3. 什么时候洗牌开始在Hadoop
- 4. 什么时候开始asyncExec事件?
- 5. 我什么时候开始看付款?
- 6. 什么时候开始考虑缩放?
- 7. 什么时候使用资产管道
- 8. 什么时候使用__proto__和什么时候使用原型
- 9. 什么时候应该使用AWS,什么时候不使用
- 10. intn_t什么时候使用它,什么时候不使用
- 11. 什么时候使用Ruby和什么时候使用PHP
- 12. 什么时候使用ByteString,什么时候不使用?
- 13. 什么时候回滚规则,提交并开始在mysql中使用?
- 14. 交易开始时的锁定表
- 15. 什么时候应该开始使用字符串替换sprintf?
- 16. 当活动开始但我们什么时候使用onStart()
- 17. 域事件处理程序什么时候开始使用?
- 18. 与find_or_create的轨道交易
- 19. 什么时候应该使用async/await,什么时候不用?
- 20. 什么时候应该关注交易规模?
- 21. 什么是开始交易对开始工作
- 22. 知道什么时候调用persist
- 23. 开始交易...提交交易问题
- 24. SQL Server CASE什么时候不使用CASE什么时候
- 25. ZF2什么时候使用getServiceLocator()什么时候不到
- 26. 什么时候使用GWT,什么时候不需要
- 27. 无论什么时候没有运行的轨道
- 28. 什么时候轨道控制器实际渲染?
- 29. 轨如何知道什么时候由send_file完成
- 30. 什么时候使用sIFR?
您不需要像这样嵌套事务。任何对.transaction的调用都会传递给ActiveRecord :: Base。你直接调用两次ActiveRecord :: Base.transaction – 2008-09-23 23:35:34