Question

Dans une application Rails 2.3.5 J'ai quelque chose comme les modèles suivants:

class Foo < ActiveRecord::Base
  has_many :bars
end

class Bar < ActiveRecord::Base
  belongs_to :foo
end

Et quand je vous appelle

Foo.all(:include => :bars)

Je vois les requêtes suivantes dans la console:

 SELECT * FROM "foos"
 SELECT "bars".* FROM "bars" WHERE ("bars".foo_id IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21))

avec tous les ids de Foo dans la clause where.

Je suppose que ce n'est pas une requête optimale alors que le nombre de ids peut être grande, et je dois précharger tous les « barres ». De plus, en fait j'ai pas deux modèles, mais une chaîne d'entre eux.

Y at-il un moyen de faire la requête de chargement désireux être comme

SELECT "bars".* FROM "bars" 

lorsque j'utilise trouver tous?

Était-ce utile?

La solution

C'est en fait une optimisation, en fait Rails modifie la stratégie d'interrogation se passe est le nombre de id élevé.

Vous pouvez également utiliser :join au lieu d'utiliser :include

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top