如果失败,`update_attribute`会返回什么?

时间:2010-08-26 10:30:06

标签: ruby-on-rails ruby update-attributes update-attribute

我有以下代码

@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会返回什么?

2 个答案:

答案 0 :(得分:5)

以下是update_attribute的来源:

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

您可以看到它更新了所请求的属性,然后在perform_validations设置为false的情况下调用save。因此,如果任何保存回调(例如update_attribute)阻止通过返回false保存记录,before_save将返回false

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

答案 1 :(得分:1)

如果update_attributes失败,则返回false。如果你忽略了返回值,你也不知道它发生了什么。你可以使用update_attributes !,然后调用save !,如果出现问题,反过来会引发异常。虽然这是你不能错过的东西(除非你写下全能救援声明),如果你没有抓住它,它将落入Rails,它将中止请求。

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