2009-10-18 9 views
4

Le nouveau style de chargement avide utilise plusieurs requêtes pour charger des associations. Est-il possible d'ajouter des conditions à ces requêtes de chargement supplémentaires? par exemple.Chargement rapide avec conditions

Bakery.find(:all, :include => :bakers)

va générer une requête de chargement désireux similaire à ceci:

SELECT * FROM bakersbakers OU (bakers .bakery_id IN (1,2,3,4,5))

.

Est-il possible d'ajouter des conditions à cette demande de chargement désireuse?

Mise à jour: Pour (peut-être) rendre cela plus clair, la requête que je suis désireux de reproduire avec AR (sans SQL) est:

SELECT * FROM bakeries LEFT JOIN bakers SUR bakeries.id = boulangers. bakery_id ET bakers.hat = 'on'

Plus précisément, j'espérais pouvoir modifier la deuxième instruction SQL chargée désireux d'être.

SELECT * FROM bakersbakers OU (bakers .bakery_id IN (1,2,3,4,5) ET bakers .hat = 'on')

Est-ce possible ou dois-je utiliser SQL? Juste à la recherche du "Rails" façon de le faire. :)

Répondre

1

Eh bien, qu'est-ce que vous voulez changer en particulier dans la requête associée?

Vous pouvez certainement le faire somethinglike ceci:

Bakery.find(:all, :include => :bakers, :conditions => ["bakers.something = ?", true]) 

Si nous avions un peu plus d'information, il peut y avoir une meilleure façon de le faire. En fonction de ce que vous cherchez, vous voudrez peut-être regarder dans named_scope s, que vous pouvez enchaîner, comme:

Bakery.bakers.available 

named_scope est assez propre.

+0

Merci pour la réponse Bill. J'ai essayé ceci, mais il effectue une jointure, renvoyant seulement des boulangeries avec des boulangers correspondant aux conditions fournies. Ce que je voudrais, c'est obtenir toutes les boulangeries, avec seulement des boulangers spécifiques chargés avec empressement. Fondamentalement, un équivalent chargé de ces deux requêtes: boulangeries = Bakery.find (: all); bakers = bakeries.find (: all,: conditions => {: hat => 'on'}) – Jay

+0

Pour ajouter plus, j'utilise actuellement Bakery.find (: all), et à mon avis, pour chaque boulangerie, J'utilise: bakery.bakers.find (: all,: conditions => {: hat => 'on'}). Vous cherchez un moyen de le faire, mais sans toutes les requêtes supplémentaires. – Jay

+0

Merci pour les clarifications. Je ne suis pas tout à fait sûr s'il y a un moyen d'obtenir exactement ce dont vous avez besoin. Peut-être jouer avec un couple de named_scopes et voir si cela fait ce dont vous avez besoin, mais j'ai le sentiment que ce ne sera pas non plus. –

Questions connexes