エラーメッセージを出したいときのコントローラー上でのrenderメソッドの使い方 [Rails]

こんにちは、カイノです。

 

投稿失敗時に出すエラーメッセージが出るように設定したにも関わらず出せなかったので、これは困ったとなっていました。

 

原因はrenderでした。

 

コントローラー上に書いたrenderによって画面遷移が他のアクションを介さずに行われるため、インスタンス変数の指定をしてあげる必要があります。

 

そもそも

renderメソッドとはレスポンスの出力をしてくれるメソッドです。
renderメソッドを使うことで、ユーザーへのレスポンスとして送信すべき内容を指定することができます。
コントローラー、ビューで使う事ができます。(下記参照)

忘れがちなrenderメソッドの使い方まとめ [Rails] - Qiita

 

ざっくりと説明しますと、指定したHTMLファイルに直接飛んでくれます。

処理が軽くなり、実用向けです。

 

こちらがbooksというコントローラーのcreateアクションの記述です。

 

f:id:kaifumi:20200116174438p:plain

@がついていないローカル変数を使っていることに注目してください。これにより、renderメソッドによる遷移先にもし@のついたインスタンス変数があった場合はビューファイルへの受け渡しができません

 

indexファイルを見てみると、

2箇所に@のついたインスタンス変数がありますので、先程のrender前に@の定義が必要になります。

f:id:kaifumi:20200116174954p:plain

f:id:kaifumi:20200116175016p:plain

 

アクションの修正後がこちら

f:id:kaifumi:20200116175200p:plain

@がついたことにより、ビューファイルへ受け渡し可能になります。

 

 

そしてエラーメッセージを表示させるeach文にも、下記のように@のついたインスタンス変数があります。

f:id:kaifumi:20200116175346p:plain

 

先程renderで@をつけて定義してあげたので、ちゃんとエラーメッセージも表示されるようになりました!

 

 

補足:renderの書き方

①render :アクション

②render("コントローラー/アクション")  ※コントローラーの前に/(スラッシュはいりません。)