質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

827閲覧

【ネストしたルーティングに対してのバリデーション】

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/04/03 10:28

編集2020/04/03 10:31

ルーティングをネストしたモデルに対してバリデーションメッセージを表示させるにはどうしたらいいのでしょうか?
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)などのフォームを入力するページでは上記のエラーメッセージを表示できるので、ルーティングをネストしたのが原因だと思います。
どうすればエラーメッセージを表示できるのでしょうか?
ご存じの方がいたらぜひ教えていただければ嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コントローラ側でインスタンス変数の名前を@likeとしてしまい、内容が保持できてなかっただけでした.....

本当にすみません.....。

投稿2020/04/03 12:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問