什么保存/保存!做?

时间:2010-01-04 02:12:01

标签: ruby-on-rails

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

if @user.save!

而不是

Save
If Save is successful
 Blah
Else
 Blah
End

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

@user.save!
if @user.save!
  blah
end

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

1 个答案:

答案 0 :(得分:7)

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

保存!

  

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

保存(perform_validation =真)

  

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

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

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