在 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
如何为 .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