ルーティングをネストしたモデルに対してバリデーションメッセージを表示させるにはどうしたらいいのでしょうか?
restaurantsに対してlikesをネストしています。
●route.rb
resources :restaurants, only: [:index] do resources :likes, only: [:show, :new, :create, :destroy] member do get :followers get :reviewers end end
Likeはレビュー機能を担うモデルです。(Reviewモデルとした方がよかったのですが、諸事情ありできませんでした....。)
レビューを新規投稿するときに以下のようにエラーメッセージを表示することができるようにフォームを作成したのですが、エラーメッセージは表示されませんでした。
●likes/new.html.erb
<div class="text-center mb-4"> <h1>"<span class="bold"><%= @restaurant.rest_name %></span> "のレビュー投稿ページ</h1> </div> <div class="row"> <div class="col-sm-6 offset-sm-3 mb-4"> <%= image_tag @restaurant.rest_image, class: 'review-image' %> </div> </div> <div class="review-form"> <%= form_with(model: [@restaurant, @like], url: restaurant_likes_path(@restaurant, @ilke) , local: true) do |f| %> <%= render 'layouts/error_messages', model: f.object %> <div class="row"> <div class="offset-sm-3 col-sm-6 mb-4"> <%= f.label :review_title, 'タイトル', class: 'bold' %> <%= f.text_field :review_title, class: 'form-control', placeholder: 'タイトルは20字以内です' %> </div> </div> <div class="row"> <div class="offset-sm-3 col-sm-6 mb-4"> <%= f.label :score, '評価', class: 'bold' %> <%= f.hidden_field :score, id: :rest_rating %> <div id="star-rating"></div> <script> $('#star-rating').raty({ path: '/assets/', click: function(score, e) { $("#rest_rating").val(score) } }); </script> </div> </div> <div class="row"> <div class="offset-sm-3 col-sm-6 mb-4"> <%= f.label :review_contents, 'レビュー内容', class: 'bold' %> <%= f.text_field :review_contents, class: 'form-control', placeholder: 'レビュー内容を500字以内で記述してください' %> </div> </div> <div class="row"> <div class="offset-sm-3 col-sm-6 mb-4"> <%= f.label :review_image, '画像', class: 'bold' %> <div> <%= f.file_field :review_image %> </div> </div> </div> <div class="row"> <div class="offset-sm-3 col-sm-6 mb-4 mt-2"> <%= f.submit 'レビューを投稿する', class: 'btn btn-block btn-success' %> </div> </div> <% end %> <div class="row"> <div class="offset-sm-3 col-sm-6 mb-4 mt-2"> <%= link_to '戻る', :back, class: 'btn btn-block btn-primary' %> </div> </div> </div>
●layouts/_error_messages.html.erb
<% if model.errors.any? %> <div id="error_explanation" class="alert alert-warning"> <ul class="mb-0"> <% model.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %>
他の新規登録ページ(users/new.html.erb)やログインページ(sessions/new.html.erb)などのフォームを入力するページでは上記のエラーメッセージを表示できるので、ルーティングをネストしたのが原因だと思います。
どうすればエラーメッセージを表示できるのでしょうか?
ご存じの方がいたらぜひ教えていただければ嬉しいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。