在 rails 控制器中复制对象时如何传递参数?

How to pass parameter when duplicating object in rails controller?

如何为 .dup 方法提供自定义参数,以便每次执行时,即使正在复制的对象的此参数为 false,参数也总是 True

我要创建的属性 true 称为 :original

这是我的 Modifications_controller create 操作:

def create
    @modification = Modification.new(change_params.merge(user: current_user))

    respond_to do |format|
      if @modification.save

        @modification.entity.boxes.each do |b| 
          @modification.boxes << b.dup #here I need to pass custom param
        end

        format.js {}
      else
        format.js {} 
      end
    end
  end

#dup 对您的模型逻辑一无所知。如果要将某些属性设置为 true,只需克隆对象然后更改值即可。

box = b.dup
box.value = true
@modification.boxes << box

您也可以考虑在模型中的自定义方法中提取特征,这样更容易为它编写测试。

def duplicate
  self.dup.tap do |i|
    i.value = true
  end
end

@modification.boxes << b.duplicate