什么保存/保存!做?

Kev*_*vin 4 ruby-on-rails

我注意到rails中常见的错误检查行是:

if @user.save!
Run Code Online (Sandbox Code Playgroud)

而不是像

Save
If Save is successful
 Blah
Else
 Blah
End
Run Code Online (Sandbox Code Playgroud)

所以我对"if @ user.save!"的理解 是它保存对象并返回true/false如果成功.如果我稍后再打电话,例如:

@user.save!
if @user.save!
  blah
end
Run Code Online (Sandbox Code Playgroud)

我是否执行了两次保存查询?

mor*_*itz 7

我承认,有点不同,但重要的是.这里的文档非常好:

保存!

随着保存!验证总是运行.如果其中任何一个失败,则会引发ActiveRecord :: RecordInvalid.

保存(perform_validation =真)

如果perform_validation为true,则运行验证.如果其中任何一个失败,则取消操作并保存返回false.如果该标志是错误的,则完全绕过验证.有关更多信息,请参阅ActiveRecord :: Validations.

所以,救!不仅会返回真或假,而只会在成功时返回真实,如果失败则会引发豁免.

这种区别的目的是使用save!,您可以使用标准的ruby工具捕获控制器中的错误,而save可以使用标准的if子句来执行相同的操作.至少这就是我的想法.