整個寧靜的動詞是在一個單一的包容性交易?也就是說,如果我在處理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