modelでバリデーションをかけ、失敗した場合に、errorsに入るメッセージをflash.nowを使い、viewで取り出したいのですが、上手くできません。
ruby
1#コントローラー 2 3def create 4 ・・・中略 5 if @hoge.save 6 redirect_to hoge_path 7 end 8 flash.now[:error] = @hoge.errors.full_messages 9 render :new 10end
ruby
1/<new.html.haml> 2 3-if flash[:error].present? 4 -binding.pry 5 -@address.errors.full_messages.each do |message| 6 %h2 7 =message 8 ・・・中略
new.html.hamlの2行目のbinding.pryでとまります。
ということは、renderはされていて、if文の中まで処理が進んでいるということだと思います。
flash[:error]の中身を見ても、ちゃんと入っていることが確認できます。
しかし、なぜなのか、viewに表示されません。
ちなみに、render :newの部分を、redirect_to + flashに書き換えたら表示できました。
renderとredirect_toの違いは自分でも調べてみて、
render=>画面描画のみ、
redirect_to => コントローラーを介してのviewの表示ということはわかりました。
ifの中まで処理が進んでいるので、画面は適切にrenderされているのだと思います。
しかし、なぜflashメッセージが表示されないのでしょうか??
周りにrubyに詳しい人がいないため、昨日の夕方から悩み続けています。
どなたか教えて下さい。お願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/09 07:26
2017/08/09 09:42
2017/08/09 12:30