Я ищу помощь по оптимизации Ruby для загрузки ассоциаций по требованию.
Это упрощенный пример. У меня 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
После некоторого исследования кажется, что код был верным, но он не работает должным образом в случае, если я назвал own_to в модели Comment. После того, как я изменил с: author на: user, все заработало как положено.