Vous ne pouvez pas simplement forcer Active Record à amener toutes ses dépendances dans une seule requête (afaik), même si le chargement est paresseux/impatient. Je pense que votre meilleur pari est:
class Category
has_many :images, -> { order(:created_at) }
has_many :articles, -> { order(:created_at) }
end
categories = Category.includes(:images, :articles)
Tant que vous itérer les catégories et obtenir leurs images et articles, ce feront trois requêtes, une pour chaque table categories
, images
et articles
, ce qui est un bon compromis entre la facilité d'utilisation d'un ORM.
Maintenant, si vous insistez pour apporter toutes ces informations dans une seule requête, il est certain que cela doit être un moyen d'utiliser Arel, mais réfléchissez-y deux fois si cela vaut la peine. Le dernier choix que je vois est le bon vieux SQL avec:
query = <<-SQL
SELECT *, images.*, articles.*
FROM categories
-- and so on with joins, orders, etc...
SQL
result = ActiveRecord::Base.connection.execute(query)
Je dissuadent vraiment cette option car il apportera beaucoup d'informations dupliquée comme vous joindre à trois tables et il serait vraiment une douleur pour les trier pour votre utilisation
Je ne pense pas que ce soit [l'association multiple de chargement hâtif] (http://guides.rubyonrails.org/active_record_querying.html#eager-loading-multiple-associations)? – matiss
Je pense que charge tous les 'Articles' dans leur exemple' Article.includes (: category,: comments) '? Mais j'aimerais voir un exemple de travail si vous en avez un! –
Exemple dans Rails "Ceci charge tous les articles et la catégorie et les commentaires associés pour chaque article". Probablement dans votre cas, il pourrait être 'Category.includes (: images,: articles)' où 'Category' est l'un avec votre ID désiré. – matiss