Le nombre de SQL émis augmente proportionnellement au nombre de données à traiter. Ce problème affecte les performances et doit être résolu. Par analogie que j'entends souvent, le problème N + 1 est que lorsque vous achetez beaucoup de produits pour faire du shopping, vous ne payez que pour chaque article.
C'est une bibliothèque qui trouve "N + 1 problèmes".
Gemfile
group :development do
gem 'bullet'
end
installation groupée. Ensemble.
config/environments/development.rb
Rails.application.configure do
#Omis en chemin
config.after_initialize do
Bullet.enable = true #Activer la gemme Bullet
Bullet.alert = true #Alerte JavaScript contextuelle dans le navigateur
Bullet.bullet_logger = true #Fichier journal de balle (Rails.root/log/bullet.Journal)
Bullet.console = true #Console du navigateur d'avertissement.Enregistrer dans le journal
Bullet.rails_logger = true #Ajouter des alertes directement aux journaux Rails
end
end
Si vous utilisez bullet, un écran d'avertissement et un journal apparaîtront.
Par exemple, établissez la relation entre les utilisateurs et les publications un à plusieurs.
user.rb
class User < ApplicationRecord
has_many :posts
end
post.rb
class Post < ApplicationRecord
belongs_to :user
end
Affiche le nom d'utilisateur pour tous les articles.
Post.all.each do |post|
puts post.user.name
end
USE eager loading detected
Psot => [:user]
Add to your finder::incluedes => [:user]
Vous verrez ces journaux et messages d'avertissement. Donc,
Post.inculudes(:user).each do |post|
puts post.user.name
end
Si c'est le cas, tout va bien.
Recommended Posts