をフェッチする方法を含んで使用する場合、私は、次のモデル構造持って余分なクエリを発射されていますはなぜActive Recordは、私がデータ
class Group < ActiveRecord::Base
has_many :group_products, :dependent => :destroy
has_many :products, :through => :group_products
end
class Product < ActiveRecord::Base
has_many :group_products, :dependent => :destroy
has_many :groups, :through => :group_products
end
class GroupProduct < ActiveRecord::Base
belongs_to :group
belongs_to :product
end
を、私は、コンソールIをincludes.In使用することを決めたので、私は私のデータベースクエリを最小限にしたかったです何かなどを試してみました、
groups = Group.includes(:products)
私の開発ログは私が
Group Load (403.0ms) SELECT `groups`.* FROM `groups`
GroupProduct Load (60.0ms) SELECT `group_products`.* FROM `group_products` WHERE (`group_products`.group_id IN (1,3,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,33,42,49,51))
Product Load (22.0ms) SELECT `products`.* FROM `products` WHERE (`products`.`id` IN (382,304,353,12,63,103,104,105,262,377,263,264,265,283,284,285,286,287,302,306,307,308,328,335,336,337,340,355,59,60,61,247,309,311,66,30,274,294,324,350,140,176,177,178,64,240,327,332,338,380,383,252,254,255,256,257,325,326))
Product Load (10.0ms) SELECT `products`.* FROM `products` WHERE (`products`.`id` = 377) LIMIT 1
、次の呼び出しを示し、最初の3つのコールが必要であると分析できましたが、最後のデータベースコールが行われた理由はわかりません。何が起こっているのですか? ありがとうございます。 :)
- 記事の下に読む
は熱心なロードを実行するためのさまざまな方法についてより多くのあなたを説明します。 ActiveRecordは、必要なときにのみSQLクエリを起動します。すべてのグループと関連する製品を取得する場合、ARはgroup.productsを呼び出すときにのみ、製品のクエリをトリガーします。 – sailor