デフォルトでは、Railsは関連付けの読み込みに遅延があります。
users = User.where(id: [1768, 1769, 1770])
あなたはuser.companyを求める場合には(例えば)データベースは、適切な会社のために再度照会する各1のための今すぐ
SELECT `users`.* FROM `users` WHERE `users`.`id` IN (1768, 1769, 1770)
を呼び出します。
ActiveRecordを使用すると、クエリのデータベース側でジョインを行い、データベース側で実行させることもできます。例:
User.joins(:company).where(companies: {id: 5})
あなたはまた、1つのクエリでレコードのセットをロードすることができ、1つの余分なクエリ内のすべての関連付けが
SELECT `users`.* FROM `users` INNER JOIN `companies` ON `companies`.`id` = `users`.`company_id` WHERE `companies`.`id` = 5
を呼び出します:
users = User.where(id: [1768, 1769, 1770]).includes(:company)
のロードが終わるだろうユーザー、会社の順番
SELECT `users`.* FROM `users` WHERE `users`.`id` IN (1768, 1769, 1770)
SELECT `companies`.* FROM `companies` WHERE `companies`.`id` IN (5, 1)
ロードされた各ユーザーに対して、たとえば、users[0].company
を要求すると、既に読み込まれた関連付けが使用され、データベースにヒットしません。
出典
2016-06-21 14:18:29
z5h
私は完全に同意します。 Railsは、リレーショナルデータベースの上にナビゲーションデータベースを再作成しようとします。私はSQLがよりシンプルで豊かな表現力と強力であることを発見して以来、私はORMを使用していません。 – reaanb