我有兩個模型:類別和廣告。 類別has_many:廣告 +我加了計數器緩存:ads_count。我使用gem awesome_nested_set製作嵌套類別,因此Category1可以是Category2的父/子,可以是Category3的父類等。我需要的是我的類別#索引是計算屬於某個類別或子類別的廣告的總數類別(或「孫子」等)。我現在的解決方案是:some_nested_categories.sum(:ads_count)。但是讓我們說,如果我的索引頁中有許多類別,它會使許多查詢檢索所有數據,並且它需要很長時間。我怎樣才能更有效地做到這一點?感謝幫助!嵌套模型的計數總和
0
A
回答
0
您可以手動將counter_cache
的想法擴展爲某種sum_cache
,我們稱之爲nested_ads_count
。
話,那就需要處理
- 4一般情況下,一個類別獲取新添加
- 一類是「移動/添加」到一個新的父類」
- 類別被刪除(或從父刪除)」
的after_update
回調,更新家長的nested_ads_count
時,無論是當前的nested_ads_count
或ads_count
更新。解決了第一種情況。
awesome_nested_set使用after_add
和after_remove
回調重新計算nested_ads_count
解決了2例
。
計算和緩存nested_ads_count
是這樣
def reset_nested_ads_count
self.nested_ads_count = some_nested_categories.sum(:nested_ads_count) + self.ads_count
end
這種方法,該方法是最佳的當頻率所使用的計數大於頻率,它是更新更大,因爲它只做了當數字將被更新時,而不是當需要查看數字時,這是非常耗時的查詢。
有一種可能發生的錯誤,那就是如果你在嵌套中有一個循環(a> b> a,或者甚至更危險a> b> c> ...> a)你可以得到自己在無限循環中。我還沒有看到任何明確說明awesome_nested_set阻止這種情況。
相關問題
- 1. 跨表的嵌套集模型計數
- 2. SSRS小計和總計的嵌套總計錯誤
- 3. ExtJS的和嵌套模型
- 4. Python的嵌套循環計算總和
- 5. PHP計算嵌套數組總數
- 6. 模型和嵌套表格
- 7. Ember.js嵌套ArrayController和模型
- 8. XSLT嵌套循環和總計
- 9. 嵌套模型
- 10. 總計嵌套選擇
- 11. Mongoose嵌套模式vs嵌套模型
- 12. VueJS嵌套數據模型
- 13. HBASE嵌套數據模型
- 14. Ember數據嵌套模型
- 15. Django模板:獲取嵌套循環的總迭代計數
- 16. XSLT 1.0嵌套分組,總計和計數
- 17. 嵌套形式Django的,嵌套模型
- 18. 嵌套設計模型表格
- 19. 嵌套表的總和
- 20. 嵌套列表和計數()
- 21. MongoDB Aggregation - 嵌套數組的總和值
- 22. 查找嵌套數組的總和
- 23. 在angularjs中計數嵌套的ng-repeats和更新多個控制器/模型的總數
- 24. Rails嵌套模型
- 25. CakePHP嵌套模型
- 26. Backbone.js嵌套模型
- 27. AutoMapping嵌套模型
- 28. igraph'ing嵌套模型
- 29. AutoMapper:嵌套模型
- 30. RailsAdmin +嵌套模型
外觀和聽起來不錯,thx – Mart17