Domanda

In un'applicazione Rails 2.3.5 Ho qualcosa come i seguenti modelli:

class Foo < ActiveRecord::Base
  has_many :bars
end

class Bar < ActiveRecord::Base
  belongs_to :foo
end

E quando sto chiamando

Foo.all(:include => :bars)

Vedo le seguenti query nella 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))

con tutti gli ID del foo nella clausola WHERE.

Credo che questo non è una query ottimale, mentre il numero di ID può essere grande, e ho bisogno di precaricare tutti i 'bar'. Inoltre, in realtà ho non due modelli, ma una catena di loro.

C'è un modo per rendere la query eager loading essere come

SELECT "bars".* FROM "bars" 

quando sto usando trovare tutte?

È stato utile?

Soluzione

Che in realtà è un'ottimizzazione, in Rails infatti cambia la strategia di interrogazione se il numero di id va alto.

Si potrebbe anche usare :join invece di usare :include

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top