2010-12-19 21 views
33

Aşağıdaki ilişkiyi göz önünde bulundurun:Raylar 3: "accepts_nested_attributes_for" nasıl çalışır?

class Product < ActiveRecord::Base 
    belongs_to :shop 
    accepts_nested_attributes_for :shop 
end 
params[:product][:shop_attributes] = {"name" => "My Shop"} 

ve ben:

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

"My Shop" adıyla yeni bir mağaza oluşturulur ve @product olarak atanır. beklenen.

Ancak, shop_attributes bir id içerdiğinde ne olacağını anlayamıyorum, örneğin:

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

Aşağıdaki hatayı alıyorum:

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

Soru 1

Bu ne anlama geliyor?

Bu durumda, yani mağazanın id olduğu biliniyor ve id ile zaten var olan dükkan var, bu dükkanın nasıl atanacağını @product nasıl oluşturmalıyım o ?

cevap

14

Yeni bir ilişkili öğe oluşturmayı varolan bir öğeyle ilişkilendirmeyi bulmaya çalıştığınızı düşünüyorum.

Yeni bir öğe oluşturmak için çalışmış görünüyorsunuz. Shop_attributes'ta kimliği geçtiğinizde işe yaramadı çünkü henüz var olmayan bir ilişki arıyor. Varolan bir öğe ile ilişkilendirmek çalışıyorsanız

, aşağıdaki kullanarak olmalıdır: Bu kimliği ile dükkana şimdiki ürünün dükkanı atar

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

'shop_id'. (Ürünün bir 'shop_id' sütunu olmalıdır.)

+7

Bir ürünün birden fazla satıcısı varsa bunun nasıl çalıştığı hakkında bir fikriniz var mı? Params [: product] [: shops_attributes] = {"0" => {"id" => "20", "name" => "Mağazam" gibi, "1" => {...}} '? Teşekkürler! – Cimm

+1

Params [: product] [: shop_id] metodolojisini kullanarak şunları yapabilirsiniz: 'params [: product] [: shop_ids] = [20,23,27]' –