質問: 結合と包含との違い 私はレールを使い始めました。今までそれを愛していますが、まだ私が把握していないことがいくつかあります。 その1つは、 `join/includes` と関連付けの間の相互作用です。すべてのモデルに対して、他のモデルとの関係( `has_many` 、 `belongs_to` など)を定義します。それで、主キーで接続してお互いを見つけることができます。 だから、 `join/includes` を使うのは何ですか?私の推測では、SQLクエリを減らし、必要なオブジェクトだけをフェッチすることですが、これについては明確にしたいと思います。 スコープのようなジョインに対するアソシエーションは、 `order/where` などです。変更可能なデフォルトの動作の種類は? これを真っ直ぐにしたいと本当に好きですか?
回答: Railscast #181 By Ryan Bates covers this very well. 実際に `join` はデータベースサーバ上の2つのテーブルを効率的に結合するために使用されます。ただし、デフォルトでは、最初のテーブルの列のみがデータセットに含まれます。 `join` を使用して、最初のテーブルのレコードを2番目のテーブルの条件と比較してテストします。 `include` は結合に似ていますが、関連するレコードの2番目のテーブルの行で効率的なデータ検索を行い、Railsの `ActiveRecord` キャッシュにそれらのレコードを設定します。 したがって、 `User` クラスと `Role` クラスがある場合、 `User` それにユーザーとロールの両方のインスタンスがデータベースから同時に取得されます。 **User #5 => points to => Role #7** **User #10 => points to => Role #12** `includes()`を使用してUserテーブルからユーザー#5と#10を取得すると、次のようなSQLクエリを使用して#7と#12のロールをインスタンス化します。 `SELECTロール。* FROM roles WHERE id IN(7,12)`