A maioria de nós saberá e usará frequentemente:
Model.includes(:another_model, :yet_another_model, some_model_with: :associated_models).all
Mas e se (por exemplo, fora de um cache ou uma consulta de junção complicada) você já tem instâncias de modelo e agora deseja pré-buscar suas associações correspondentes?
Existe uma maneira fácil de fazer isso:
ActiveRecord::Associations::Preloader.new(objects, [:another_model, :yet_another_model, some_model_with: :associated_models]).run
Isso irá “armazenar em cache” os objetos associados dentro dos objetos. O importante aqui é que ele usará uma consulta por tipo de modelo para pré-buscar todos os objetos.
Então, é isso:
objects.each{|o| o.another_model.do_something }
não resultará em uma consulta por iteração.