新的軌道和我正在跟蹤使用rails 3.1的敏捷web開發中找到的Depot項目。一切都很好,直到書本使用「構建」方法時我迷路了。構建方法在軌道上的紅寶石
@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.line_items.build(product: product)
我的谷歌搜索使我明白,.build方法僅僅是一個創建於表中的一行(與表之間的關聯),更清潔的方式。但在上面的代碼,我期待的代碼看起來像這樣的事情:
@line_item = @cart.line_items.build(product_id => params[:product_id])
我不明白爲什麼筆者不得不存儲產品的整個排(產品= Product.find(PARAMS [ :product_id]))而不是僅僅得到product_id ...
有沒有比我能理解的更多?
我喜歡你的答案,雖然nzifnab有相同的答案,你的提示使我成爲一個更好的開發者:) – Finks
通過協會做不需要構建?與當前版本完全不同 – ahnbizcad
澄清 - 在當前的Rails中,ActiveRecord :: Relation#build'被別名爲'ActiveRecord :: Relation#new',但'ActiveRecord :: Associations :: CollectionProxy#new'被別名爲'ActiveRecord: :關聯:: CollectionProxy#build'(相反的方向)。通過關聯,'build' /'new'將創建新記錄,並將記錄ID適當關聯。因此,Relation#build和Relation#new與CollectionProxy#build和CollectionProxy#new的實現略有不同。但是,由於它們在兩個類中都是別名,因此使用'build'或'new'並不重要。 – sealocal