2

Rails 2.3.5 アプリケーションでは、次のようなモデルがあります。

class Foo < ActiveRecord::Base
  has_many :bars
end

class Bar < ActiveRecord::Base
  belongs_to :foo
end

そして、私が電話しているとき

Foo.all(:include => :bars)

コンソールに次のクエリが表示されます。

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

where句にすべてのfooのIDを含めます。

ID の数が多い場合、これは最適なクエリではないと思います。すべての「バー」をプリロードする必要があります。また、実際には 2 つのモデルではなく、一連のモデルがあります。

熱心な読み込みクエリを次のようにする方法はありますか

SELECT "bars".* FROM "bars" 

すべて検索を使用しているときは?

4

1 に答える 1

4

これは実際には最適化です。実際、ID の数が多くなると、Rails はクエリ戦略を変更します。

:join使用する代わりに使用することもできます:include

于 2009-12-25T10:58:42.090 に答える