Rails Associations推送(集合<<)

时间:2013-01-16 15:18:59

标签: ruby-on-rails has-many rails-activerecord

将实体推送到它的父集合会导致加载集合吗?

e.g:

Parent.childs << a_child

parent.childs“array”现在是否已加载所有子项或只是“a_child”?即一个SQL“select * from childs where parent_id =?”语句将在添加到集合之前执行吗?

编辑:

http://apidock.com/rails/v3.2.3/ActiveRecord/Associations/CollectionAssociation/concat_records似乎在调用“insert_record”之前调用“add_target”,它将实体添加到@target数组......

1 个答案:

答案 0 :(得分:1)

不(感谢上帝)! Parent.childs是代理和'&lt;&lt;'只会触发a_child

的创建/更新

有关How do rails association methods work?

的更多信息

还在rails / collection_associations.rb的rails评论中

  

你需要小心对目标的假设:   代理在需要之前不会从数据库中获取记录,   但是使用+ build +创建的新内容会添加到目标中。所以   目标可能是非空的,仍然缺少等待阅读的孩子   来自数据库。如果直接查看数据库,则不能   假设这是整个集合,因为可能有新的记录   添加到目标等

快速检查我的控制台,确认孩子没有加载。

parent.children << child; nil

=&GT;只有父母和孩子加载....