【Ruby on Rails】空欄投稿で処理が失敗した場合のメッセージ表示
2021/9/7学習メモです✍
投稿フォームにid追加
<%= form_with model: comment, url: [board, comment], id: 'new_comment' do |f| %>
からのcreate.js.erbファイルで
$("#error_messages").remove() <% if @comment.errors.present? %> $("#new_comment").prepend("<%= j(render('shared/error_messages', object: @comment)) %>") <% else %> $("#js-table-comment").prepend("<%= j(render('comments/comment', comment: @comment)) %>") $("textarea").val('') <% end %>
でOK!
なぜこれで動くかについては
以前、ユーザー登録やログイン実装辺りで
<% if object.errors.any? %> <div class="alert alert-danger"> <ul class="mb-0"> <% object.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %>
を部分テンプレート化してたから。
そしてrender('shared/error_messages', object: @comment)
で呼び出されてるだけ◎
効率的!
エラー文の日本語化もi18nで設定済みでした。
おまけ
$("#error_messages").remove()
でメッセージが増え続けるのを防いでいる。.present?
は、オブジェクトが存在すればtrueを返し、存在しなければfalseを返すメソッド.any?
でもいける?と思い試したらいけたけど調べたら微妙に違う扱いらしい。
- ここでの
prepend
は入力フォームより前に表示するように使われている
参照
コメント投稿、削除機能のajax化 - olive_miuのブログ
【Rails】 | Pikawaka - ピカ1わかりやすいプログラミング用語サイト
【Rails】バリデーションのエラーメッセージを取得・表示・日本語化する方法を完全解説!|TechTechMedia