2010-12-19 39 views
33

考慮以下關聯關係:Rails 3:「accepts_nested_attributes_for」如何工作?

class Product < ActiveRecord::Base 
    belongs_to :shop 
    accepts_nested_attributes_for :shop 
end 

如果

params[:product][:shop_attributes] = {"name" => "My Shop"} 

和我做的:創建並分配給@product

@product = Product.new(params[:product]) 
@product.save 

名稱爲 「我的店」 的新店鋪,如預期。

不過,我想不通的時候shop_attributes包含一些id,就像發生了什麼:

params[:product][:shop_attributes] = {"id" => "20", "name" => "My Shop"} 

我得到以下錯誤:

Couldn't find Shop with ID=20 for Product with ID= 

問題1

這是什麼意思?

問題2

如果是這種情況,即店鋪的id是已知的,並且這樣的id已經存在的店,我應該如何創建@product,使得這個店將入駐它呢?

回答

14

我認爲你試圖找出創建一個新的關聯項目與現有項目關聯。

創建一個新的項目,你似乎有它的工作。 當您在shop_attributes中傳遞該ID時,它不起作用,因爲它正在查找尚不存在的關聯。

如果你想與現有項關聯,你應該使用下列內容:

params[:product][:shop_id] = "20" 

這將當前產品的商店分配給id店「shop_id」。 (產品應該有一個'shop_id'欄。)

+7

任何想法如果一個產品有多個商店如何工作?像'params [:product] [:shops_attributes] = {「0」=> {「id」=>「20」,「name」=>「My Shop」},「1」=> {...}} '?謝謝! – Cimm 2011-06-29 13:52:51

+1

使用'params [:product] [:shop_id]'方法,你可以這樣做:'params [:product] [:shop_ids] = [20,23,27]' – 2013-10-11 17:23:22

相關問題