[英]Rails : model.save returns false but models.errors is an empty hash
[英]In Rails 5, is there a functional difference between "model.save" and "model.errors.empty?"?
我正在使用 Rails 5。我的控制器中有这个逻辑......
@user = UserService.create_user(params)
if @user.errors.empty?
render :create, :status => :ok
上面和上面有什么区别吗
@user = UserService.create_user(params)
if @user.save
render :create, :status => :ok
我正在尝试决定是使用“.save”还是“.errors.empty?” 逻辑。
两者都只是劣等的做事方式:
@user = UserService.build_user(params) # just instanciate the record
if @user.save
# ...
else
# ...
end
功能上有区别吗? 是的。 .save
触发模型上与保存可能产生副作用的记录相关的所有回调。 如果您只想检查它是否已保存,请使用.persisted?
. .errors.empty?
是对.valid?
的不良模仿.valid?
.
两者都不会炸毁任何东西,但它仍然困扰着我,因为它使您的意图变得不那么清晰。 如果您执行以下操作,它还会创建两个查询(并触发更新回调):
@user = UserService.create_user(params)
@user.foo = bar
if @user.save
# ...
else
# ...
end
当您想将参数与来自其他地方(如会话)的信息合并时,这非常常见。
render :create, status: :ok
也很奇怪。 通常你只想重定向到新创建的资源,因为这会影响历史记录,这样浏览器实际上会返回到正确的页面而不是/users
如果用户点击后退按钮。 对于 api,您可以使用status: :created, location: @user
或资源的 JSON 表示进行响应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.