调用实例方法时更新记录的正确方法。

Correct way to update a record while calling an instance method.

当我调用更新时,我不想更新我想要的记录:

  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 行也可以。