好吧,这可能会被否决为更多的"风格偏好"而不是"细节问题",但谷歌让我失望了。
在我的自学之旅中(从 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
怎么回事?我错过了某种改进吗?
在野外发现:
(这两个来自我第一次注意到更改的黑客马拉松生成的相同代码库(
events_controller.rb
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