Rails ActiveRecord N+1 Проблема

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

@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 ответ

Решение

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

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

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

Другие вопросы по тегам