Rails ActiveRecord N + 1 Проблема - PullRequest
1 голос
/ 28 июня 2011

У меня есть заявление для получения следующих данных: название порции еды, название еды, название еды и категория еды.и все четыре поля находятся в разных таблицах.я использую такой оператор

@food_servings = FoodServing.find(params[:food_serving_id], 
                   :include => {:food => [:food_brand,:food_category] })

, и вот моя модель

FoodServing  belongs_to    Food
                           Food         belongs_to    FoodCategory
                           Food         belongs to    FoodBrand

, когда я выполняю приведенный выше оператор, я вижу в журналах, что выполняется много операторов SQLЯсно, что это проблема N + 1, я думаю, я передаю неверный параметр include, чтобы найти метод.Кто-нибудь может помочь мне оптимизировать этот звонок?

1 Ответ

1 голос
/ 29 июня 2011

Я уже некоторое время пользуюсь Rails 3 исключительно, но я уверен, что это правильный способ решения проблемы запросов AR N + 1 в Rails 2.

Теперь, если вы запускаетецелую строку 100x для разных записей FoodServing, вы по-прежнему будете видеть тонну обращений в дБ, поскольку оптимизация применяется только к каждому вызову FoodServing.find, а не ко всем из них вместе.

Я бы сказал нав этот момент нам понадобится больше информации из ваших логов.Какие записи загружаются чаще, чем вы ожидаете?

...