我注意到,在轨一个常见的错误检查线路:保存/保存到底是什么!做?
if @user.save!
,而不是像
Save
If Save is successful
Blah
Else
Blah
End
所以我的理解:“如果@ user.save!”它既保存了对象,并且如果成功则返回true/false。如果我稍后调用它,例如:
@user.save!
if @user.save!
blah
end
我是否执行保存查询两次?
我注意到,在轨一个常见的错误检查线路:保存/保存到底是什么!做?
if @user.save!
,而不是像
Save
If Save is successful
Blah
Else
Blah
End
所以我的理解:“如果@ user.save!”它既保存了对象,并且如果成功则返回true/false。如果我稍后调用它,例如:
@user.save!
if @user.save!
blah
end
我是否执行保存查询两次?
我承认有点不同,但仍然很重要。这里的文档相当不错:
保存!
随着保存!验证始终运行。如果它们中的任何一个失败,则引发ActiveRecord :: RecordInvalid。
节省(perform_validation =真)
如果perform_validation是真实的验证运行。如果其中任何一个失败,则取消操作并保存返回错误。如果标志是错误的,验证完全被绕过。有关更多信息,请参阅ActiveRecord ::验证。
所以,保存!不只是返回真或假,而且只有在成功时才是真实的,并且如果失败则会提出异议。
这种区分的目的是,用保存!你是能够赶上使用标准红宝石设施,这样做在你的控制器错误,而保存能够if子句你做使用标准相同。至少这就是我的想法。
逻辑上,答案必须是“是”,但我不是Rails专家 – 2010-01-04 02:14:00
不确定,如果对象中没有任何变化,您可能会发现第二次保存不打扰数据库。请确保检查是否有任何内容进入日志文件(开发环境中的logs/development.log) – 2010-01-04 02:22:59