6

我有以下代码

@user = User.find(params[:id])
if (@user.activation_status == "active") 
  #some code here 
  @user.update_attribute('activation_status' ,'inactive')  # Line 44
  #send mail to user that his account is Acivated
else

end

有没有Line 44可能失败的机会?因为数据库内存已满或网络故障。在那种情况下会发生什么?如果这会产生问题,有什么更好的方法来避免它?update_attribute如果失败会返回什么?

4

2 回答 2

6

这是来源update_attribute

def update_attribute(name, value)
  send(name.to_s + '=', value)
  save(false)
end

您可以看到它更新了请求的属性,然后调用saveperform_validations设置为false。因此update_attributefalse如果任何保存回调(例如before_save)通过返回阻止记录被保存,则将返回false

如果存在较低级别的错误,例如数据库内存不足,那么我希望数据库驱动程序将此作为异常引发,该异常将传递给您的代码。

于 2010-08-26T11:25:29.353 回答
1

如果 update_attributes 失败,它将返回 false。如果你忽略返回值,你也不知道它发生了。您可以使用 update_attributes!,它又调用 save!,如果出现问题,它又会引发异常。虽然这是你不能错过的东西(除非你写了包罗万象的救援语句),但如果你没有抓住它,它将落入 Rails,它会中止请求。

检查返回值通常是个好主意。

于 2010-08-26T11:09:19.307 回答