Запрос дочернего объекта Rails приводит к проблеме N + 1 - PullRequest
1 голос
/ 18 августа 2010

при написании некоторых приложений для личного пользования.Я обнаружил, что дочерний запрос не так хорош, как выглядит.

Например, у меня есть 2 объекта

Category has_many Files
File belongs_to Category

File.category будет иметь доступ к своей родительской категории.Но это приводит к известной проблеме N + 1.

Например, я хочу, чтобы моя домашняя страница перечисляла 20 новейших файлов и соответствующую категорию, используя что-то вроде этого

for file in @files
  %p
    = file.name
    = file.category.name

Как я долженрешить эту проблему?

Ответы [ 2 ]

6 голосов
/ 18 августа 2010
@files = File.find(:all, :limit => 20, :order => "created at desc", :include => :category)
2 голосов
/ 18 августа 2010

В вашем find, если вы скажете :include => :category, это будет стремиться загрузить категории для вас и избежать отдельного запроса для получения названия каждой категории. Итак, для вашего примера 20 самых последних файлов вы можете сделать:

@files = File.find :all, :limit => 20, :include => :category,
  :order => 'created at desc'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...