Je suis nouveau sur les rails et j'apprécierais une aide pour optimiser mon utilisation de la base de données.Rails: comment charger 2 modèles via join?
Existe-t-il un moyen de charger deux modèles associés les uns aux autres avec une requête DB?
J'ai deux modèles Personne et image:
class Person < ActiveRecord::Base
has_many :images
end
class Image < ActiveRecord::Base
belongs_to :person
end
Je voudrais charger un groupe de personnes et leurs images associées à un seul voyage à la DB en utilisant une commande de jointure. Par exemple, dans SQL, je peux charger toutes les données dont j'ai besoin avec la requête suivante:
select * from people join images on people.id = images.person_id where people.id in (2, 3) order by timestamp;
J'espérais que ce rails bout ferait ce que je dois:
>> people_and_images = Person.find(:all, :conditions => ["people.id in (?)", "2, 3"], :joins => :images, :order => :timestamp)
Ce code exécute l'instruction SQL que j'attends et charge les instances de Person dont j'ai besoin. Cependant, je vois que l'accès aux images d'une personne conduit à une requête SQL supplémentaire.
>> people_and_images[0].images
Image Load (0.004889) SELECT * FROM `images` WHERE (`images`.person_id = 2)
Utilisation de l': option include dans l'appel à trouver() ne se charge les deux modèles, mais il va me coûter une somme supplémentaire SELECT en l'exécutant en même temps que la jointure.
Je voudrais faire dans Rails ce que je peux faire en SQL qui est de saisir toutes les données dont j'ai besoin avec une requête.
Toute aide serait grandement appréciée. Merci!
Avez-vous trouvé une solution? J'apprécierais vraiment toute aide – Ben