結合と包含との違い

私はレールを使い始めました。今までそれを愛していますが、まだ私が把握していないことがいくつかあります。

その1つは、 join/includes と関連付けの間の相互作用です。すべてのモデルに対して、他のモデルとの関係( has_many belongs_to など)を定義します。それで、主キーで接続してお互いを見つけることができます。

だから、 join/includes を使うのは何ですか?私の推測では、SQLクエリを減らし、必要なオブジェクトだけをフェッチすることですが、これについては明確にしたいと思います。 スコープのようなジョインに対するアソシエーションは、 order/where などです。変更可能なデフォルトの動作の種類は?

これを真っ直ぐにしたいと本当に好きですか?

1

1 答え

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)

0
追加された