1

エンティティをその親コレクションにプッシュすると、コレクションがロードされますか?

例えば:

Parent.childs << a_child

parent.childsの「配列」にはすべての子がロードされていますか、それとも単に「a_child」ですか?つまり、SQLは「parent_id =?の子から*を選択します」コレクションに追加する前にステートメントが実行されますか?

編集:

http://apidock.com/rails/v3.2.3/ActiveRecord/Associations/CollectionAssociation/concat_recordsは、エンティティを@target配列に追加する「insert_record」を呼び出す前に「add_target」を呼び出しているようです...

4

1 に答える 1

1

いいえ(神に感謝します)!Parent.childsはプロキシであり、「<<」はの作成/更新をトリガーするだけですa_child

Railsの関連付けメソッドはどのように機能しますか?

また、associations/collection_associations.rbのレールコメント

ターゲットに関する仮定に注意する必要があります。プロキシは、必要になるまでデータベースからレコードをフェッチしませんが、+build+で作成された新しいレコードがターゲットに追加されます。そのため、ターゲットは空ではなく、データベースからの読み取りを待機している子がまだ不足している可能性があります。データベースを直接見ると、新しいレコードがターゲットに追加されている可能性があるため、コレクション全体であるとは限りません。

私のコンソールを簡単にチェックすると、子がロードされていないことが確認されました。

parent.children << child; nil

=>ロードされた親と子のみ...

于 2013-01-16T15:40:43.683 に答える