2013-01-16 32 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

相關問題