2013-01-16 29 views
1

将实体推送到它的父集合会导致集合被加载吗?Rails关联推(collection <<)

例如为:

Parent.childs << a_child 

是在parent.childs “阵列” 现在装了所有孩子的,或只是 “a_child”?即将SQL“select * from childs where parent_id =?”语句将在添加到集合之前执行?

编辑:

http://apidock.com/rails/v3.2.3/ActiveRecord/Associations/CollectionAssociation/concat_records似乎称之为 “add_target” 以前叫 “insert_record” 它增加了实体的@target阵列...

+1

你可以在你的Rails控制台尝试了这一点('轨console',或'轨C'的简称),看看SQL获得什么产生。 – MrDanA

+2

顺便说一下,它是'''儿童''' – Zepplock

回答

1

否(感谢上帝)! Parent.childs是代理和“< <”只会触发创作/的a_child

更多信息上How do rails association methods work?

此外,在协会的轨道意见更新/ collection_associations.rb

您需要请注意与目标有关的假设: 代理不会从数据库中提取记录,直到需要它们, ,但使用+ build +创建的新记录被添加到目标。因此, 目标可能不是空的,仍然缺少儿童在等待从数据库中读取 。如果你直视到数据库中,你不能 认为是整个集合,因为新的记录可能已经 加到目标等

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

parent.children << child; nil 

=>只有父母和孩子在装入....

+0

哼,也许我的问题并不清楚,因为我已经知道了。请参阅我最近的编辑。 TYVM。 – d0bz

+0

谢谢你正是我所期待的! – d0bz

相关问题