在Rails 4.1中,ActiveRecord destroy_all
是否包含事務中的整個函數?例如,如果我有一堆記錄,我在其上執行了一個destroy_all
操作,並且它們對這些單個對象運行一些回調,並且其中一個回調失敗,那麼整個操作在該點回滾?ActiveRecord destroy_all
2
A
回答
4
它看起來並不像它:
# File activerecord/lib/active_record/relation.rb, line 386
def destroy_all(conditions = nil)
if conditions
where(conditions).destroy_all
else
to_a.each {|object| object.destroy }.tap { reset }
end
end
(從http://apidock.com/rails/v4.1.8/ActiveRecord/Relation/destroy_all)
當然,你可以在你自己的交易包裹。
1
查看destroy_all文檔,似乎沒有在事務中完成。這裏是源代碼:
# activerecord/lib/active_record/base.rb, line 879
def destroy_all(conditions = nil)
find(:all, :conditions => conditions).each { |object| object.destroy }
end
它找到的所有記錄,並呼籲他們每個人.destroy
。來自文檔:
通過實例化每個記錄 並調用其銷燬方法銷燬記錄匹配條件。
但是,如果你想讓它在一個事務中發生,你可以用你的destroy_all
代碼在一個事務中,以確保它的發生在一個單一的交易:
ActiveRecord::Base.transaction do
YourModel.destroy_all(:conditions => conditions)
end
相關問題
- 1. 爲什麼ActiveRecord destroy_all需要這麼久?
- 2. 爲什麼ActiveRecord has_many使用delete_all而不是destroy_all?
- 3. Rails destroy_all undo
- 4. delete_all vs destroy_all?
- 5. 破壞VS destroy_all
- 6. destroy_all不存在的子類
- 7. Destroy_all方法使用混淆
- 8. 在數組上運行destroy_all?
- 9. 製作的Rails #destroy_all跑得更快
- 10. 滑軌:destroy_all和更新的has_many大小
- 11. ActiveRecord銷燬 - 無例外
- 12. ActiveRecord :: ConnectionNotEstablished(ActiveRecord :: ConnectionNotEstablished)
- 13. 什麼是消毒destroy_all的最佳方式 - Rails的
- 14. destroy_all不通過調用銷燬has_many的每個對象
- 15. Rails 4 - 爲什麼索引記錄在destroy_all後仍然存在?
- 16. 在Rails中做更高效的destroy_all方法?
- 17. 活動記錄 - destroy_all並創建一個交易
- 18. mongoid destroy_all隨後與計數結果的緩存結果
- 19. 如何在Rails中預覽delete_all或destroy_all查詢
- 20. ActiveRecord
- 21. ActiveRecord:選擇限制的最大值
- 22. ActiveRecord :: ReadOnlyRecord(ActiveRecord :: ReadOnlyRecord):在更新
- 23. ActiveRecord返回ActiveRecord ::關係
- 24. 比較ActiveRecord :: Base和ActiveRecord
- 25. ActiveRecord :: RecordNotDestroyed
- 26. ActiveRecord :: MultiparameterAssignmentErrors
- 27. ActiveRecord Mapping
- 28. ActiveRecord :: AssociationTypeMismatch
- 29. ActiveRecord的
- 30. Activerecord + WebServices