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