前提・実現したいこと
記事の新規投稿の際に入力に不備があった場合、エラーメッセージを表示させたい。
発生している問題・エラーメッセージ
ブラウザにエラーメッセージが表示されない。
該当のソースコード
<section class="hero is-success"> <div class="hero-body"> <div class="container"> <h1 class="title"> ゲーム記事作成 </h1> </div> </div> </section> <% if @game.errors.any? %> <div class="notification is-danger"> <h2><%= pluralize(@game.errors.count, "error") %> prohibited this object from being saved: not successfully</h2> <ul> <% @game.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <section class="section"> <div class="container"> <div class="columns is-centered"> <div class="column is-6"> <%= form_with model: @game do |f| %> <div class="field"> <%= f.label :title, "ゲーム名", class: "label" %> <%= f.text_field :title, class: "input" %> </div> <div class="field"> <%= f.label :body, "楽しみ方", class: "label" %> <%= f.text_area :body, class: "textarea" %> </div> <div class="field"> <%= f.label :image, "写真", class: "label" %> <%= f.attachment_field :image, class: "input" %> </div> <%= f.submit "投稿", class: "button is-success" %> <% end %> </div> </div> </div> </section>
def new @game = Game.new end def create @game = Game.new(game_params) @game.user_id = current_user.id if @game.save redirect_to game_path(@game), notice: "投稿に成功しました。" else render :new end end
試したこと
コントローラーのnewアクションで定義しているインスタンス変数の見直しも行いましたが特に問題になるような箇所は見当たらず、ターミナルでのロールバックトランザクションが起きているので機能的には問題ないかと思われます。
Controllerを載せてください
コントローラーを追加しました。
よろしくお願い致します!
view の new全体を見せてください。
if @game.errors.any? がどういう文脈で現れるのかがわからないので
viewのnewを全体に変更致しました!
う〜〜む
良さげですね。
エラーがあることは確実なのですか?
そうですね、、
本来であればバリデーションのエラーメッセージが表示されると思うのですが何度試しても表示されません。
マイページの編集画面でもnewと同じようなバリデーションのエラーメッセージを表示させるためのコードを書いているのですが、こちらはしっかりと表示されるんです。。
根本的な解決には至らないと思いますが、rails s の再起動は試していますか?(二週間前だから流石に試してるか、、、)
はい!何度も試しました????
showではなくnewに行くのだが、エラーメッセージがでない
のですね?
そうですね!
コントローラー記述してある通りrenderでnewを呼び出すようにしています!
if @game.save でなく if @game.save! にするとどうなります?
何も変化無しです????
ターミナルでもrollback transactionが出ているので機能的には正常に動いているのでviewに問題があるんですかね?
save に成功していないなら、save! で例外で止まると思うのですが、止まらなかった?
ということは成功しているから showに行くはず。
はて。。。。
@game.errors.count で出力してみて、errorがあるか調べてみることはできますか?
rollback transactionが出ていても、そもそも当該部分にエラーが渡っていなければ表示件数は0になると思うので。。
あなたの回答
tips
プレビュー