调用实例方法时更新记录的正确方法。
Correct way to update a record while calling an instance method.
当我调用更新时,我不想只更新我想要的记录:
- 调用模型函数来更新模型的 属性。
- 更新模型。
--
def update
@simulation = Simulation.find(params[:id])
@simulation.next # This is a function that has some logic to changes a property of the simulation record
@simulation.update(simulation_params)
end
这是解决这个问题的正确方法,还是我应该使用单独的控制器功能或其他路线?
听起来 "next" 是一种在更新(或保存)之前处理一些幕后细节的方法。既然如此,你这样做是合理的。不需要另一个控制器方法或路由。如果你想坚持 "update" 你可以。
在这种情况下,无论您是完成更新还是保存都没有什么不同。更新和保存都更新数据库中的记录。
有帮助吗?
为了清楚起见,我个人会在 Simulation
中创建一个实例方法,高级代码应该类似于..
#Simulation model
class Simulation
....
def next_and_update(attrs)
next
update(attrs)
end
end
#controller
def update
@simulation = Simulation.find(params[:id])
@simulation.next_and_update(simulation_params)
end
想法是,如果你能阅读代码并理解发生了什么,那么多 1-2 行也可以。
当我调用更新时,我不想只更新我想要的记录:
- 调用模型函数来更新模型的 属性。
- 更新模型。
--
def update
@simulation = Simulation.find(params[:id])
@simulation.next # This is a function that has some logic to changes a property of the simulation record
@simulation.update(simulation_params)
end
这是解决这个问题的正确方法,还是我应该使用单独的控制器功能或其他路线?
听起来 "next" 是一种在更新(或保存)之前处理一些幕后细节的方法。既然如此,你这样做是合理的。不需要另一个控制器方法或路由。如果你想坚持 "update" 你可以。
在这种情况下,无论您是完成更新还是保存都没有什么不同。更新和保存都更新数据库中的记录。
有帮助吗?
为了清楚起见,我个人会在 Simulation
中创建一个实例方法,高级代码应该类似于..
#Simulation model
class Simulation
....
def next_and_update(attrs)
next
update(attrs)
end
end
#controller
def update
@simulation = Simulation.find(params[:id])
@simulation.next_and_update(simulation_params)
end
想法是,如果你能阅读代码并理解发生了什么,那么多 1-2 行也可以。