エラーメッセージを表示する方法について書きます。
Railsでメッセージ出力する際によく使用されるrender、redirect_to、flashについても簡単に書きます。
##実装したいこと
フォームの入力値に誤りがあるときに、以下のようなエラーメッセージを表示させる
##実装したコード
@error_txt = '※入力に誤りがあるか、登録されていません。'
render :new
インスタンス変数@error_txtにエラーメッセージをセットし、renderでテンプレートnewを表示させるように指定します。
※エラー判定の処理は省略しています
- if @error_txt
p.error
= @error_txt
テンプレート側ではインスタンス変数の@error_txtの値の存在チェックを行い、あれば@error_txtを表示させます。
##renderとは
renderとはテンプレートを指定して表示させる(レンダリングする)ためのメソッドです。
画面遷移させることなく、表示させることができます。
##redirect_toとの違い
renderと同様にページを指定して表示させるメソッドにredirect_toがあります。
renderが画面遷移することなく指定したテンプレートを表示するのに対して、
redirect_toメソッドはリダイレクトさせるためのメソッドで、URLを指定してリクエストを再送信するようにブラウザに指令を出します。
ブラウザはこの指令に応じ、指定されたURLに対して改めてリクエストをサーバーに送信します。
ブラウザとサーバー間のやりとりや処理が増えるため、改めてリクエストを送信させる必要がない場合は、renderを使うのが良いです。
今回はフォームの入力内容に対してエラーメッセージを表示させるだけで、リダイレクトさせたくないためrenderを使用します。
##flashとは
railsにおけるメッセージ表示について調べるとflashに関する記事が多くでてきます。
flashはsessionを利用した機能の一つでメッセージを画面に表示するためのメソッドです。
flashで設定したメッセージはセッションに保存され、リダイレクトされても保持されるためredirect_toメソッドを一緒に使うことが多いです。
今回はrenderを使用しており、リダイレクトもなく、セッションに値を保持する必要がないのでflashを使わずにインスタンス変数を使いました。
##まとめ
- リダイレクト不要なエラーメッセージはrenderとインスタンス変数で実装する
- リダイレクトが必要な場合は、redirect_toとflashで実装する