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

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

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

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

Q&A

解決済

2回答

365閲覧

Routing Errorを解決したい

zoomer

総合スコア1

Ruby on Rails

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

0グッド

0クリップ

投稿2020/10/07 09:43

#解決したいこと

photoを親として、commentを子にしたルーティングを設定し、コメントが保存されれば「link_to」で詳細ページに遷移させる。

保存できなければ「render」で保存されていない状態の詳細ページに遷移させるという実装をしたいです。

#エラー文

Routing Error
No route matches [POST] "/photo/1"

#試したこと

  1. userとcommentも親子関係ではあるので、ルーティングに追加してみた。

→変化なし
2.PhotoControllerのcreateアクションの変数がおかしいと思い、変更を加えていったが、変化なし。

ただ、上記がおかしいとしたらRouting Errorではないと思うので、やはりrouteがずれているのかと思うが、糸口が見つからない。

という状態です。

ご回答お願い致します。

よろしくお願い致します。

#該当コード

route

1Rails.application.routes.draw do 2 devise_for :users 3 root to: "photo#index" 4 resources :photo, only: [:new, :create, :show ,:edit ,:update, :destroy] 5 resources :photo do 6 resources :comments, only: :create 7 end 8end

PhotoController

1class PhotoController < ApplicationController 2 3 def index 4 @photo = photo.includes(:user) 5 end 6 7 def new 8 @photo = Photo.new 9 end 10 11 def create 12 if 13 Photo.create(photo_params) 14 redirect_to root_path 15 else 16 render :new 17 end 18 end 19 20 def show 21 @photo = Photo.find(params[:id]) 22 @comment = Comment.new 23 end 24 25 def edit 26 photo = photo.find(params[:id]) 27 end 28 29 def update 30 if 31 photo = Photo.find(params[:id]) 32 redirect_to photo_path 33 else 34 render :edit 35 end 36 end 37 38 def destroy 39 end 40 41 private 42 def photo_params 43 params.require(:photo).permit(:title, :catch_copy, :concept, :image).merge(user_id: current_user.id) 44 end 45 46end

CommentsController

1class CommentsController < ApplicationController 2 3 def create 4 @comment = Comment.new(comment_params) 5 if 6 @comment.save 7 redirect_to photo_path(@comment.photo) 8 else 9 @photo = @comment.photo 10 @comments = @photo.comments 11 render "photo/show" 12 end 13 end 14 15 private 16 def comment_params 17 params.require(:comment).permit(:text).merge(user_id: current_user.id, photo_id: params[:photo_id]) 18 end 19end

view

1<% if user_signed_in? %> 2 <%= form_with local: true do |f|%> 3 <div class="field"> 4 <%= f.label :comment, "コメント" %><br /> 5 <%= f.text_field :comment %> 6 </div> 7 <div class="actions"> 8 <%= f.submit "送信する", class: :form__btn %> 9 </div> 10 <% end %> 11 <% end %>

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

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

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

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

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

guest

回答2

0

自己解決

viewのform_withの中にモデルを記載していないためのエラーでした。

投稿2020/10/08 07:39

zoomer

総合スコア1

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

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

0

rake routesを打つとどうなりますでしょうか?
よくあるのが、POSTではなくGETで送っているケースですね。

投稿2020/10/07 09:59

firegrape

総合スコア902

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

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

zoomer

2020/10/07 10:13

ご回答ありがとうございます。 ターミナルでは、 photo_comments POST /photos/:photo_id/comments(.:format) comments#create と出ています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問