Что возвращает update_attribute в случае сбоя? - PullRequest
5 голосов
/ 26 августа 2010

У меня есть следующий фрагмент кода

@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 ]

5 голосов
/ 26 августа 2010

Вот источник для update_attribute:

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

Вы можете видеть, что он обновляет запрошенный атрибут и затем вызывает save с perform_validations, установленным на false.Поэтому update_attribute вернет false, если какой-либо из обратных вызовов сохранения (например, before_save) помешал записи сохранить, вернув false.

Если была ошибка более низкого уровня, например, изпамяти в базе данных, тогда я ожидаю, что драйвер базы данных вызовет это как исключение, которое будет передано вашему коду.

1 голос
/ 26 августа 2010

Если update_attributes завершится неудачно, он вернет false.если вы проигнорируете возвращаемое значение, вы даже не поймете, что это произошло.Вы можете использовать update_attributes !, который в свою очередь вызывает save !, что, в свою очередь, вызывает исключение, если что-то идет не так.Хотя это то, что вы не можете пропустить (если вы не напишете всеохватывающие операторы спасения), но если вы его не перехватите, он попадет в Rails и прервет запрос.хорошая идея проверить возвращаемое значение.

...