💭
Rails update vs update!
NG
# NG:
if @article.update!(article_params)
redirect_to medium_article_path(@current_medium, @article), success: '記事を更新しました'
else
redirect_to medium_article_path(@current_medium, @article), danger: '記事更新に失敗しました'
end
WHY
-
update
,update!
ともにvalidationを行う -
update
はバリデーション失敗時、false
を返す -
update!
はバリデーション失敗時、例外を発生させる - そのためelseへ移動しない
# https://railsdoc.com/page/model_update より参照
# 失敗したら例外発生
モデル.update!(ID=:all, 属性)
GOOD
-
update!
ではなくupdate
で実装する -
update!
を使う場合はrescueで実装する - でも本当はrescueではなくif elseで解決したほうがよい
# GOOD
@article.update!(article_params)
redirect_to medium_article_path(@current_medium, @article), success: '記事を更新しました'
rescue StandardError => e
redirect_to medium_article_path(@current_medium, @article), danger: e
end
参考
Discussion