我注意到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我是否执行了两次save查询?
发布于 2010-01-04 10:16:50
我承认有一点不同,但尽管如此,还是很重要的。这里的文档相当不错:
保存!
带save的
!验证始终运行。如果其中任何一个失败,ActiveRecord::RecordInvalid都会被抛出。
保存(perform_validation=true)
如果perform_validation为true,则运行验证。如果其中任何一个失败,操作将被取消,并且save返回false。如果该标志为false,则完全绕过验证。有关详细信息,请参阅ActiveRecord::Validations。
因此,save!不会只返回true或false,而只会在成功时返回true,如果失败则会引发异常。
这种区别的目的是,在save!中,您可以使用标准的ruby工具来捕获控制器中的错误,而save允许您使用标准的if子句来执行相同的操作。
https://stackoverflow.com/questions/1997201
复制相似问题