嵌套属性覆盖相关模型

时间:2009-11-04 04:55:53

标签: ruby-on-rails

我的控制器中有一个new动作,我正在传递参数,因此我的新对象的表单将填入用户正在复制的记录中的值,具体来说这会给用户在提交新内容之前“编辑”新内容的机会。

像这样:

def new
  @parent = Recipe.find(params[:parent_id])
  @recipe = Recipe.new(
    :name => @parent.name,
    :description => @parent.description,
    :ingredients => @parent.ingredients,
    :steps => @parent.steps
  )
end

但问题是我的ingredientssteps都有嵌套属性,每个属性都有原始ID。问题是因为rails没有给我的嵌套属性一个新的id它不会创建那些记录,事实上我认为它可能会试图保存其他的。

我可以在这做什么?有没有办法将@parent.ingredients对象传递给我的:ingredients参数并给它一个新的ID?

就像我知道问题可能是行动中的第一行

@parent = Recipe.find(params[:parent_id])

因为它是一个发现它会带来参数​​,但是找到那个对象,并为所有对象嵌套属性创建新的id?

2 个答案:

答案 0 :(得分:1)

@recipe = Recipe.new(:name => @parent.name, :description => @parent.description)

@parent.ingredients.each { |i| @recipe.ingredients.build(:name => i.incredient_name, :description => i.ingredient_description) }

有意义吗?

答案 1 :(得分:0)

哇!我的下巴刚好在地板上。

@recipe = @parent.dup