Frage

In einer Rails 2.3.5 -Anwendung habe ich so etwas wie die folgenden Modelle:

class Foo < ActiveRecord::Base
  has_many :bars
end

class Bar < ActiveRecord::Base
  belongs_to :foo
end

Und wenn ich anrufe

Foo.all(:include => :bars)

Ich sehe die folgenden Fragen in der Konsole:

 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))

Mit allen IDs des Foos in der Where -Klausel.

Ich denke, dies ist keine optimale Abfrage, während die Anzahl der IDs möglicherweise groß ist, und ich muss alle "Balken" vorladen. Außerdem habe ich nicht zwei Modelle, sondern eine Kette von ihnen.

Gibt es eine Möglichkeit, die eifrige Ladeanfrage so zu gestalten

SELECT "bars".* FROM "bars" 

Wenn ich alles finde?

War es hilfreich?

Lösung

Das ist tatsächlich eine Optimierung, in der Tat ändert Rails die Abfragestrategie, wenn die Anzahl der IDs hoch ist.

Sie könnten auch verwenden :join anstatt zu verwenden :include

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top