我正在尋找有關按需加載關聯的Ruby優化的幫助。在Rails中包含關聯優化
這是簡化的例子。我有3個型號:Post
,Comment
,User
。參考文獻是:Post
有許多意見和Comment
有參考User
(:作者)。現在,當我轉到帖子頁面時,我希望看到帖子正文+所有評論(以及他們各自的作者姓名)。這需要以下2個查詢:
select * from Post -- to get post data (1 row)
select * from Comment inner join User -- to get comment + usernames (N rows)
在代碼中,我有:
Post.find(params[:id], :include => { :comments => [:author] }
但預期它不工作:正如我在後臺看到的,仍然是N + 1命中(其中一些被緩存)。我該如何優化?
UPD 經過一番調查後,它看起來像代碼是正確的,但如預期的情況下,我有一個名爲belongs_to的在評論模型這是行不通的。一旦我從:作者更改爲:用戶,它按預期工作。
我做得對由最後一個變種,仍然看到的評論#,它單獨加載的作者(命中數據庫不止一次, )。 – Vitaly 2010-04-14 19:06:32
http://guides.rubyonrails.org/active_record_querying.html#nested-associations-hash,它看起來像你可以巢包括 – Corey 2010-04-14 19:09:27
@Corey - 是的,我正在關注這篇文章,你可以看到我的問題,但那樣做沒有按預期工作。 – Vitaly 2010-04-14 19:10:56