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_validationsset toで呼び出すことがわかりますfalse。したがって、いずれかの保存コールバック (例: ) が をupdate_attribute返すことによってレコードの保存を妨げた場合は、 が返されます。falsebefore_savefalse

データベースでメモリ不足などの低レベルのエラーが発生した場合、データベース ドライバーがこれを例外として発生させ、コードに渡されることを期待しています。

于 2010-08-26T11:25:29.353 に答える
1

update_attributes が失敗すると、false が返されます。戻り値を無視すると、それが起こったこともわかりません。update_attributes! を使用すると、save! が呼び出され、何か問題が発生した場合に例外が発生します。これは見逃してはならないものですが (キャッチオール レスキュー ステートメントを書かない限り)、キャッチしなければ Rails にフォールスルーされ、リクエストが中止されます。

通常は、戻り値を確認することをお勧めします。

于 2010-08-26T11:09:19.307 に答える