エラーメッセージを出したいときのコントローラー上でのrenderメソッドの使い方 [Rails]
こんにちは、カイノです。
投稿失敗時に出すエラーメッセージが出るように設定したにも関わらず出せなかったので、これは困ったとなっていました。
原因はrenderでした。
コントローラー上に書いたrenderによって画面遷移が他のアクションを介さずに行われるため、インスタンス変数の指定をしてあげる必要があります。
そもそも
renderメソッドとはレスポンスの出力をしてくれるメソッドです。
renderメソッドを使うことで、ユーザーへのレスポンスとして送信すべき内容を指定することができます。
コントローラー、ビューで使う事ができます。(下記参照)
忘れがちなrenderメソッドの使い方まとめ [Rails] - Qiita
ざっくりと説明しますと、指定したHTMLファイルに直接飛んでくれます。
処理が軽くなり、実用向けです。
こちらがbooksというコントローラーのcreateアクションの記述です。
@がついていないローカル変数を使っていることに注目してください。これにより、renderメソッドによる遷移先にもし@のついたインスタンス変数があった場合はビューファイルへの受け渡しができません
indexファイルを見てみると、
2箇所に@のついたインスタンス変数がありますので、先程のrender前に@の定義が必要になります。
アクションの修正後がこちら
@がついたことにより、ビューファイルへ受け渡し可能になります。
そしてエラーメッセージを表示させるeach文にも、下記のように@のついたインスタンス変数があります。
先程renderで@をつけて定義してあげたので、ちゃんとエラーメッセージも表示されるようになりました!
補足:renderの書き方
①render :アクション
②render("コントローラー/アクション") ※コントローラーの前に/(スラッシュはいりません。)