我的控制器中有一个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
但问题是我的ingredients
和steps
都有嵌套属性,每个属性都有原始ID。问题是因为rails没有给我的嵌套属性一个新的id它不会创建那些记录,事实上我认为它可能会试图保存其他的。
我可以在这做什么?有没有办法将@parent.ingredients
对象传递给我的:ingredients
参数并给它一个新的ID?
就像我知道问题可能是行动中的第一行
@parent = Recipe.find(params[:parent_id])
因为它是一个发现它会带来参数,但是找到那个对象,并为所有对象嵌套属性创建新的id?
答案 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