前提・実現したいこと
画像とテキスト投稿アプリにて、ユーザーのマイページにそのユーザーが投稿した画像を一覧表示させるために、別ディレクトリの画像一覧の部分テンプレートをrenderを用いて読み込みたい。
発生している問題・エラーメッセージ
投稿一覧ページから、ユーザーのマイページに遷移する際に以下のエラーメッセージが表示される
NameError in Users#show
Showing /projects/protospace-33489/app/views/prototypes/_prototype.html.erb where line #3 raised:
undefined local variable or method `prototype' for #<#Class:0x00007fad0b9fc850:0x00007fad0ba06c38>
Did you mean? @prototypes
該当のソースコード
ruby
1views/prototypes/_prototype.html.erb 2 3<div class="card"> 4 <%= link_to image_tag(prototype.image, class: :card__img ), prototype_path(prototype.id) %> 5 <div class="card__body"> 6 <%= link_to prototype.title , prototype_path(prototype.id), class: :card__title %> 7 <p class="card__summary"> 8 <%= prototype.catch_copy %> 9 </p> 10 <%= link_to "by #{prototype.user.name}", user_path(prototype.user.id), class: :card__user %> 11 </div> 12</div>
ruby
1views/users/show.html.erb 2 3<div class="main"> 4 <div class="inner"> 5 <div class="user__wrapper"> 6 <h2 class="page-heading"> 7 <%= "#{@user.name}さんの情報"%> 8 </h2> 9 省略 10 <div class="user__card"> 11 <%# 部分テンプレートでそのユーザーが投稿したプロトタイプ投稿一覧を表示する %> 12 <%= render "prototypes/prototype", collection: @prototypes %> 13 </div> 14 </div> 15 </div> 16</div>
ruby
1controllers/users_controller.rb 2 3class UsersController < ApplicationController 4 def show 5 @user = User.find(params[:id]) 6 @prototypes = @user.prototypes 7 end 8end
ruby
1controllers/prototypes_controller.rb 2 3class PrototypesController < ApplicationController 4 5 def index 6 @prototypes = Prototype.all 7 end 8 9 def new 10 @prototype = Prototype.new 11 end 12 13 def create 14 prototype = Prototype.new(prototype_params) 15 if prototype.save 16 redirect_to root_path 17 else 18 # なぜこの記述が必要か? 19 @prototype = Prototype.new 20 render action: :new 21 end 22 end 23 24 def edit 25 @prototype = Prototype.find(params[:id]) 26 end 27 28 def update 29 prototype = Prototype.find(params[:id]) 30 if prototype.update(prototype_params) 31 redirect_to action: :show 32 else 33 @prototype = Prototype.find(params[:id]) 34 render :edit 35 end 36 end 37 38 def show 39 @prototype = Prototype.find(params[:id]) 40 @comment = Comment.new 41 @comments = @prototype.comments.includes(:user) 42 end 43 44 def destroy 45 prototype = Prototype.find(params[:id]) 46 prototype.destroy 47 redirect_to root_path 48 end 49 50 private 51 52 def prototype_params 53 params.require(:prototype).permit(:title, :catch_copy, :concept, :image).merge(user_id: current_user.id) 54 end 55end
試したこと
このエラーが最初に発生したときに、usersコントローラーのshowアクションにprototypeのインスタンス変数を記述しておらず、それが原因かと思いましたが解決せず。
他にどのような原因が考えられますか?
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/06 14:58