【问题标题】:Rails 3: How does "accepts_nested_attributes_for" work?Rails 3:“accepts_nested_attributes_for”如何工作?
【发布时间】:2010-12-19 22:34:25
【问题描述】:

考虑以下关联:

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

一个名为“My Shop”的新商店被创建并分配给@product,正如预期的那样。

但是,我不知道当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以便将这个店铺分配给它?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 nested-attributes


    【解决方案1】:

    我认为您正在尝试弄清楚创建新的关联项目与关联现有项目。

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

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

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

    这会将当前产品的商店分配给 id 为“shop_id”的商店。 (产品应该有一个“shop_id”列。)

    【讨论】:

    • 知道如果一个产品有多个商店,这是如何工作的吗?喜欢params[:product][:shops_attributes] = {"0" =&gt; {"id" =&gt; "20", "name" =&gt; "My Shop"}, "1" =&gt; {...}}?谢谢!
    • 使用params[:product][:shop_id] 方法,您可以:params[:product][:shop_ids] = [20,23,27]
    猜你喜欢
    • 1970-01-01
    • 2015-12-11
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    相关资源
    最近更新 更多