1
我想優化我們的一些查詢。一個特別的挑戰是試圖加載多態模型。在這種情況下,UserView
是多態的,並具有以下欄目:如何加載多態模型?
user_id, user_viewable_id, user_viewable_type
當我嘗試運行此查詢。
@user_views = UserView.select('user_views.* AS user_views, songs.* AS songs, users.* AS users')
.joins('INNER JOIN users AS users ON user_views.user_id = users.id')
.joins('INNER JOIN songs AS songs ON user_views.user_viewable_id = songs.id')
.where(:user_viewable_type => 'Song').order('user_views.id DESC').limit(5)
它似乎並不渴望加載查詢。我正在使用名爲MiniProfiler的gem,它表明它實際上正在運行n + 1個查詢,而不是一個。
下AR查詢返回該SQL:
SELECT user_views.* AS user_views, songs.* AS songs, users.* AS users FROM "user_views" INNER JOIN users AS users ON user_views.user_id = users.id INNER JOIN songs AS songs ON user_views.user_viewable_id = songs.id WHERE "user_views"."user_viewable_type" = 'Song' ORDER BY user_views.id DESC LIMIT 5
返回全在一個查詢記錄。奇怪爲什麼這在AR中沒有按預期工作。
任何想法如何讓這個工作?
[這裏](http://stackoverflow.com/a/16124295/936494)是一個很好的討論這個東西。希望它有助於在這個問題上獲得更好的見解。 – 2016-04-13 10:12:46