2017-02-20 57 views
0

我想顯示一個帶有樹結構的下拉列表。使用@manoj給出的this SO解決方案,category_options_array的代碼在模型的選擇表單控件中以奇妙的方式顯示樹更少的條目,但另一個模型有大約30個父ID,其中一些具有1級深度,服務器崩潰。實際上,即使它使用了20個parent_ids,它也會執行20個SQL查詢,這對於一個下拉控件來說太多了。Rails通過急切加載優化樹結構代碼

我想它收集到緩存 - 這樣

@categories = Category.where('parent_id = ? AND id != ?', parent_id, current_id).order(:name) 
@categories.each do |c| ..... 

然而,它運行相同的20 SQL查詢,20緩存。

當我閱讀急切的加載它通常是一個連接條件,我找不到任何單個模型的例子。可以通過加載/任何其他方式優化查詢運行一次,並安排數組顯示?TIA。

回答

0

很難給出代碼一個確切的答案,沒有看到你的模型的數據結構是如何設置的,但總體來講,你可以使用「包括」語句渴望負荷,這也支持嵌套:

http://apidock.com/rails/ActiveRecord/QueryMethods/includes

包含子模型時查詢的外觀如何?

+0

它運行儘可能多的選擇查詢,因爲有類別記錄,甚至在收集它們在一個哈希@categories它運行所有這些......奇怪!類別模型是:name:string,parent_id:integer(默認值= 0) – Means

+0

您可以發佈模型定義的要點嗎? – MBHNYC