簡體   English   中英

渴望加載多態關聯

[英]Eager loading for polymorphic associations

不確定這是否會屬於性能部分以及模型/數據庫部分,所以這里...

假設我有3個模型:

Movie {
has_one :interest, :as => :resource
}
Song {
has_one :interest, :as => :resource
}
Story {
has_one :interest, :as => :resource
}

還有...

Interest {
belongs_to :resource, :polymorphic => true
}

現在,如果我需要所有電影的所有興趣列表,並且還想顯示這些電影對象的創建日期(以說明它們的年齡),則可以使用對resource_type屬性的查找,然后使用@ some_interest.resource .created_at。

問題是,如果我有100個電影興趣,那么我會得到101個查詢,對嗎? 因此線性退化。 我嘗試在查詢調用中使用:include => [:resource],但它說不能在多態關聯中使用include。

我如何急於加​​載或優化此問題以避免這種嚴重的退化?

任何幫助將不勝感激 !!

如果使用searchlogic ,則有一種特殊的語法可以處理多態關系。 您可以通過指定后綴為type的相關類的名稱,在關系的has端進行搜索。

例如,給定您的模型,您應該能夠執行以下操作以獲取最近90天內制作的電影:

Interest.resource_movie_type_created_at_gt(Time.now-90.days)

Searchlogic為您設置了相關模型上的聯接,這可以緩解性能問題。

當然,您始終可以使用find_by_sql方法編寫自己的SQL。

PS。 一個非常有用的技巧是在編寫搜索時打開Rails控制台中的日志記錄 這樣,您就可以直接在控制台中查看生成的SQL,而不必深入研究日志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM