Rails 3:如何"accepts_nested_attributes_for"工作? [英] Rails 3: How does "accepts_nested_attributes_for" work?

查看:74
本文介绍了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.new(params[:product])
@product.save

将按预期创建一个名为我的商店"的新商店并将其分配给@product.

a new shop with name "My Shop" is created and assigned to the @product, as expected.

但是,我不知道shop_attributes包含某些id时会发生什么,例如:

However, I can't figure out what happens when shop_attributes contains some id, like:

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以便将该商店分配给它? /p>

If this is the case, i.e. the id of the shop is known, and the shop with such id already exist, how should I create the @product such that this shop will be assigned to it ?

推荐答案

我认为您正在尝试创建一个新的关联项,而不是与一个现有项关联.

I think that you're trying to figure out creating a new associated item vs. associating with an existing item.

对于创建新项目,您似乎可以正常使用. 当您在shop_attributes中传递ID时,该ID不起作用,因为它正在查找尚不存在的关联.

For creating a new item, you seem to have it working. When you passed the id in shop_attributes, it did not work, because it's looking up an association that doesn't exist yet.

如果您要与现有项目关联,则应使用以下内容:

If you're trying to associate with an existing item, you should be using the following:

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

这会将当前产品的商店分配给ID为"shop_id"的商店. (产品应具有"shop_id"列.)

This will assign the current product's shop to the shop with id 'shop_id'. (Product should have a 'shop_id' column.)

这篇关于Rails 3:如何"accepts_nested_attributes_for"工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆