如何正确更新ruby中的活动记录

时间:2018-02-02 22:48:52

标签: ruby ruby-on-rails-4

我的模型有更新方法

def udpate_something(params)
    update(id: params[:id],
           b: params[:b],
           c: params[:c],
           d: params[:d])
end

并在控制器中

def update
    Model.find(id: params[:id])
         .update_something(id: params[:id]
                           b: params[:b],
                           c: params[:c],
                           d: params[:d])
end

这是更新的正确方法还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

首先,应该非常罕见(即几乎闻所未闻!)来更新记录的id(主键)。这是记录的标识符;通过更改此操作,您将搞乱任何关联并可能导致与另一条记录id发生冲突。

此外,您的udpate_something [SIC]方法并没有真正实现任何目标。这是一种无用的包装方法。为什么不这样做:

def update
  Model.find(id: params[:id])
       .update(b: params[:b],
               c: params[:c],
               d: params[:d])
end

您的控制器方法不处理错误消息,使用强参数(!!)或执行任何渲染/重定向操作 - 但这是一个单独的故事。所有控制器操作都没有通用的“正确的事情”;这真的取决于你想要实现的目标!

我建议查看一些基本资料,例如rails documentation,以了解控制器的结构。