在Rails中,我試圖加載一些東西來加速它。我有一個Parent-Child-Grandchild的情況,但只需要Parent和Sunchild的屬性。如果我...急於加載沒有孩子在軌道中的孫子屬性
Parent.all.includes(:child => :grandchild)
然後對孩子的未使用貪婪加載子彈抱怨(這是真的,我並不需要它)。是否有更簡單的方法可以訪問父記錄和Grandchild.some_attribute?
在Rails中,我試圖加載一些東西來加速它。我有一個Parent-Child-Grandchild的情況,但只需要Parent和Sunchild的屬性。如果我...急於加載沒有孩子在軌道中的孫子屬性
Parent.all.includes(:child => :grandchild)
然後對孩子的未使用貪婪加載子彈抱怨(這是真的,我並不需要它)。是否有更簡單的方法可以訪問父記錄和Grandchild.some_attribute?
一對夫婦選擇...
1)高速緩存中的盛大孩子的值(非規範化的數據庫,添加一列存儲父屬性)。如果只有一個孫子,並且你希望在你有很多父母的情況下經常展示這個價值,那就這樣做。
2)你可以做一個has_many:通過對孫輩嗎?然後你可以做一個include(:grandchildren)
。這可能會節省生成子對象。 3)如果它確實是子孫(has_ones或belongs_to),那麼你可能會找到一個簡單的方法來根據父id對grandchild進行查詢(或範圍)。然後,您可以運行兩個查詢,一個獲取parent.all,一個獲取grandchild.grandchild_of(parents.map(&:id))
,然後以ruby循環並將該屬性作爲屬性添加到父級,隨後在循環父級時可供使用。
4)最後,做一個特定的手工sql查詢來選擇父屬性和grandchild.attribute。該屬性將附加到父級並可由parent.grandchild_attribute_name訪問。 Parent.select('parents.*, grandchild.attribute').joins(:grandchild)
。這需要根據您的模型進行試驗。
#2擊中了現場。謝謝! – robertmiles3
很高興工作。 – Swards