`accepts_nested_attributes_for`属性未被克隆

时间:2009-11-03 08:58:14

标签: ruby-on-rails

我想创建一个模型的新实例,但是我想从不同的记录中引入一些参数,基本上将大多数参数复制到新实例中,但也将一些字段留空。

克隆它有效(感谢@weppos

# class RecipesController
def new
  @parent = Recipe.find(params[:parent_id])
  @recipe = @parent.clone
end

虽然这确实有效,但它会破坏我所有的嵌套属性:

# class Recipe
accepts_nested_attributes_for :ingredients, :reject_if => lambda { |a| a.values.all?(&:blank?) }, :allow_destroy => true

就像它只保存新属性并抛弃所有旧属性一样,那些应该从另一个实例复制的属性。

1 个答案:

答案 0 :(得分:1)

使用clone方法。

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

如果克隆行为不适合您的需要,那么您可以从#clone开始创建自定义方法,然后取消设置所有不必要的属性。