4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rails create、updateアクションでの小ネタ(エラーハンドリングについて)

Posted at

はじめに、、、

そもそもエラーハンドリングとは、、、

エラーハンドリングとは、プログラムの処理中に処理が妨げられる事象が発生した際、その処理をエラーとして対処する処理のことである。例外処理とも呼ばれる。

とのことです。
今回はこれについて話していきます。

railsでエラーハンドリングを行う

railsでエラーハンドリングを行わなければならなくもっとも使用頻度で高いものでいうとmodelのcreateアクションだと思います。

article_controller.rb
def create
  @article = Article.create(article_params)
  redirect_to articles_path
end

上のような書き方をしていると、もし仮にarticleがバリデーションの設定等の原因で新しいレコードをcreate出来なかった場合、エラーがでてそこで処理が止まってしまいます。
ローカル開発なら問題ないですが、実務環境で処理が止まってしまうと数分で何百万もの損失を出してしまう可能性があります。
そこで、エラーハンドリングを行います。

そしてエラーハンドリングをやった時のcreateアクションが↓です。

article_controller.rb
def create
  #@articleと言う変数に値を入れる
  @article = Article.new(article_params)
  if @article.save #保存できるか?
    #保存に成功した時はarticleのindexアクションにリダイレクト
    redirect_to articles_path
  else
    #保存に失敗したときはarticleのnewアクションにリダイレクト
    render :new
  end
end

このように、値をseveする時にseveできているかの条件式(if文)を挟む事で、
値が作成されずエラーが出て処理が停止してしまう事は無くなります。

最後に

railsではscaffoldなどのrails g コマンドを使ってビューファイルを生成した時は、自動でエラーハンドリングは行われていますが、
自分でsave処理を行う時などは、気をつけてコーディングしましょう!

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?