#解決したいこと
photoを親として、commentを子にしたルーティングを設定し、コメントが保存されれば「link_to」で詳細ページに遷移させる。
保存できなければ「render」で保存されていない状態の詳細ページに遷移させるという実装をしたいです。
#エラー文
Routing Error
No route matches [POST] "/photo/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 %>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。