前提・実現したいこと
link_toを使用して一覧ページから詳細ページへ遷移ができるように実装したいが
ActionController::UrlGenerationErrorがでてしまう。
もし解決方法がわかる方がいらしたらご教示願います。
発生している問題・エラーメッセージ
ActionController::UrlGenerationError in Contents#index No route matches {:action=>"show", :book_id=>6, :controller=>"contents"}, missing required keys: [:id]
該当のソースコード
controller
1# contents_controller.rb 2class ContentsController < ApplicationController 3 before_action :authenticate_user!, only: [:new, :edit, :destroy] 4 before_action :set_content, only: [:show, :edit] 5 before_action :move_to_index, only: [:edit] 6 7 def index 8 @contents = Content.includes(:book).order("created_at DESC") 9 end 10 11 def new 12 @content = Content.new 13 end 14 15 def create 16 content = Content.create(content_params) 17 if content.save 18 redirect_to book_content_path(@content.id) 19 else 20 render :new 21 end 22 end 23 24 def destroy 25 content = Content.find(params[:id]) 26 content.destroy 27 redirect_to action: :index 28 end 29 30 def edit 31 end 32 33 def update 34 content = Content.find(params[:id]) 35 content.update(content_params) 36 if content.update(content_params) 37 redirect_to content_path 38 else 39 @content = Content.find(params[:id]) 40 render :edit 41 end 42 end 43 44 def show 45 end 46 47 private 48 49 def content_params 50 params.permit(:chapter, :write_down, :wrap_up, :action_plan).merge(book_id: params[:book_id]) 51 end 52 53 def set_content 54 @content = Content.find(params[:id]) 55 end 56 57 def move_to_index 58 unless current_user.id == @content.user.id 59 redirect_to action: :index 60 end 61 end 62end
views
1# index.html.erb 2<main class="main"> 3 <div class="inner"> 4 <% if user_signed_in? && current_user.id #== content.user.id %> 5 <div class="greeting"> 6 <%= link_to "内容の新規投稿", new_book_content_path, class: :greeting__link%> 7 </div> 8 <% end %> 9 <div class="card__wrapper"> 10 <%= render partial: 'content', collection: @contents %> 11 </div> 12 </div> 13</main>
view
1# _content.html.erb 2<div class="card"> 3 <div class="card__body"> 4 <%=link_to content.chapter, book_content_path(content.id) %> 5 </div> 6</div>
仮説
・content.idの取得ができていないのではないかと思っている。
・遷移先のpathが間違っているのではないか。
試したこと
・contents_controllerの記述確認。
(ここが間違っていると思うが正しい記述がわからない)
・routesでのpathの確認。
補足情報(FW/ツールのバージョンなど)
rails 6.0.0
mysql2 0.5.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/06 11:54 編集