2010-07-14 133 views
1

不知道這可能會下降,性能部分以及模型/數據庫部分,所以這裏去....預先加載的多態關聯

比方說,我有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_typ上查找e屬性,然後@ some_interest.resource.created_at。

這個問題是,如果我有100個電影利益,那麼我會得到101個查詢嗎?所以線性退化。我在我的查詢調用中嘗試使用:include => [:resource],但它說不能使用包含在多態關聯中。

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

任何幫助將不勝感激!

+0

我想這會回答你的問題:http://stackoverflow.com/questions/2390017/ruby-on-rails-include-on-a-polymorphic-association-with-submodels – 2010-07-14 21:37:45

回答

0

如果您使用的是searchlogic,那麼可以使用特殊的語法來處理可能有幫助的多態關係。您可以通過指定後綴爲type的相關類的名稱來搜索關係的has一側。

E.g.給你的模型,你應該能夠做到這樣的事情來獲得在最近90天內創建的電影:

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

Searchlogic樹立加入關於你的相關模型,這應該減輕性能問題。

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

PS。一個非常有用的技巧是在寫作搜索時給turn on logging in the Rails console。這使您可以在控制檯中查看正確生成的SQL,而不必深入查看日誌。