RoR 控制器:创建/更新方法:@record.save vs @record.errors.any?



好吧,这可能会被否决为更多的"风格偏好"而不是"细节问题",但谷歌让我失望了。

在我的自学之旅中(从 Rails 2 开始(,我学会了这样做:

class UsersController < ApplicationController
...
def update
@user = User.find(params[:user_id])
...
if @user.save
# handle success
else
# handle failure
end
end
...
end

但是最近(Rails 4/5(我看到了使用它的模式:

class UsersController < ApplicationController
...
def update
@user = User.find(params[:user_id])
...
@user.save
if @user.errors.any?
# handle failure
else
# handle success
end
end
...
end

怎么回事?我错过了某种改进吗?

在野外发现:

(这两个来自我第一次注意到更改的黑客马拉松生成的相同代码库(

  1. events_controller.rb

  2. registrations_controller.rb

(现在我正在搜索我的浏览器历史记录,我会在重新找到时发布更多(

第二种模式的使用方式略有不同。 当您设置属性并使用保存时,它是多余的。 但通常您可以使用create方法。所以第二种模式看起来像这样:

def create
@user = User.create(user_params)
if @user.errors.any?
# handle failure
else
# handle success
end
end

作为create方法返回一个实例作为结果。

我认为这种方法中的update更多地用于一致性和复制粘贴update因为该方法返回布尔值,您可以使用第一种模式进行update

def update
if @user.update(user_params)
# handle failure
else
# handle success
end
end

最新更新