前提・実現したいこと
Railsで実装課題に取り組み中です。投稿された画像をクリックすると、投稿した人の名前やタイトルなどを表示する詳細ページを表示したいです。
発生している問題・エラーメッセージ
NameError in Prototypes#show
Showing /Users/xxxxxxxxx/projects/protospace-xxxxx/app/views/prototypes/show.html.erb where line #15 raised:
undefined local variable or method `prototype' for #<#Class:0x00007f9938b0c128:0x00007f9938b16808>
Did you mean? prototype_url
該当のソースコード
show.html.erb
HTML
1<main class="main"> 2 <div class="inner"> 3 <div class="prototype__wrapper"> 4 <p class="prototype__hedding"> 5 <%= プロトタイプタイトル %> 6 </p> 7 <%= link_to "by #{prototype.user.name}", prototype_path(prototype.user_id), method: :get, class: :prototype__user %> 8 <%# プロトタイプの投稿者とログインしているユーザーが同じであれば以下を表示する %> 9 <div class="prototype__manage"> 10 <%= link_to "編集する", root_path, class: :prototype__btn %> 11 <%= link_to "削除する", root_path, class: :prototype__btn %> 12 </div> 13 <%# // プロトタイプの投稿者とログインしているユーザーが同じであれば上記を表示する %> 14 <div class="prototype__image"> 15 <%= image_tag prototype_url %> 16 </div> 17 <div class="prototype__body"> 18 <div class="prototype__detail"> 19 <p class="detail__title">キャッチコピー</p> 20 <p class="detail__message"> 21 <%= キャッチコピー %> 22 </p> 23 </div> 24 <div class="prototype__detail"> 25 <p class="detail__title">コンセプト</p> 26 <p class="detail__message"> 27 <%= コンセプト %> 28 </p> 29 </div> 30 </div> 31 <div class="prototype__comments"> 32 <%# ログインしているユーザーには以下のコメント投稿フォームを表示する %> 33 <%# <%= form_with local: true do |f|%> 34 <div class="field"> 35 <%# <%= f.label :hoge, "コメント" %><br /> 36 <%# <%= f.text_field :hoge %> 37 </div> 38 <div class="actions"> 39 <%# <%= f.submit "送信する", class: :form__btn %> 40 </div> 41 <%# <% end %> 42 <%# // ログインしているユーザーには上記を表示する %> 43 <ul class="comments_lists"> 44 <%# 投稿に紐づくコメントを一覧する処理を記述する %> 45 <li class="comments_list"> 46 <%= " コメントのテキスト "%> 47 <%= link_to "( ユーザー名 )", root_path, class: :comment_user %> 48 </li> 49 <%# // 投稿に紐づくコメントを一覧する処理を記述する %> 50 </ul> 51 </div> 52 </div> 53 </div> 54</main> 55
index.html.erb
HTML
1<main class="main"> 2 <div class="inner"> 3 <%# ログインしているときは以下を表示する %> 4 <% if user_signed_in? %> 5 <div class="greeting"> 6 こんにちは、 7 <%= link_to "#{current_user.name}さん", root_path, class: :greeting__link%> 8 </div> 9 <% end %> 10 <%# // ログインしているときは上記を表示する %> 11 <div class="card__wrapper"> 12 <%# 投稿機能実装後、部分テンプレートでプロトタイプ投稿一覧を表示する %> 13 <%= render partial: 'prototype', collection: @prototypes %> 14 </div> 15 </div> 16</main> 17
_prototype.html.erb
HTML
1<div class="card"> 2 <%= link_to image_tag(prototype.image, class: :card__img ), prototype_path(prototype.user_id), method: :get%> 3 <div class="card__body"> 4 <%= link_to "#{prototype.title}", prototype_path(prototype.user_id), method: :get, class: :card__title%> 5 <p class="card__summary"> 6 <% "prototype.catch_copy" %> 7 <%= prototype.catch_copy%> 8 </p> 9 <%= link_to "by #{prototype.user.name}", prototype_path(prototype.user_id), method: :get, class: :card__user %> 10 <% prototype.user.name%> 11 </div> 12</div>
prototypes-controller.rb
Ruby
1class PrototypesController < ApplicationController 2 3 def index 4 @prototypes = Prototype.all 5 end 6 7 def new 8 @prototype = Prototype.new 9 end 10 11 def create 12 @prototype = Prototype.new(prototype_params) 13 if @prototype.save 14 redirect_to root_path 15 else 16 render :new 17 end 18 19 def show 20 @prototype = Prototype.find(params[:id]) 21 22 end 23 24end 25 26 private 27 28 def prototype_params 29 params.require(:prototype).permit(:title, :catch_copy, :concept, :image).merge(user_id: current_user.id) 30 end 31 32end
routes.rb
Ruby
1Rails.application.routes.draw do 2 devise_for :users 3 root to: "prototypes#index" 4 5 resources :prototypes, only: [:index, :new, :create, :show] do 6 end 7end 8
prototype.rb
Ruby
1class Prototype < ApplicationRecord 2 3 belongs_to :user 4 has_one_attached :image 5 6 validates :image, presence: true 7 validates :title, presence: true 8 validates :catch_copy, presence: true 9 validates :concept, presence:true 10 11end 12
routesの結果
terminal
1 Prefix Verb URI Pattern Controller#Action 2 new_user_session GET /users/sign_in(.:format) devise/sessions#new 3 user_session POST /users/sign_in(.:format) devise/sessions#create 4 destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy 5 new_user_password GET /users/password/new(.:format) devise/passwords#new 6 edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 7 user_password PATCH /users/password(.:format) devise/passwords#update 8 PUT /users/password(.:format) devise/passwords#update 9 POST /users/password(.:format) devise/passwords#create 10 cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel 11 new_user_registration GET /users/sign_up(.:format) devise/registrations#new 12 edit_user_registration GET /users/edit(.:format) devise/registrations#edit 13 user_registration PATCH /users(.:format) devise/registrations#update 14 PUT /users(.:format) devise/registrations#update 15 DELETE /users(.:format) devise/registrations#destroy 16 POST /users(.:format) devise/registrations#create 17 root GET / prototypes#index 18 prototypes GET /prototypes(.:format) prototypes#index 19 POST /prototypes(.:format) prototypes#create 20 new_prototype GET /prototypes/new(.:format) prototypes#new 21 prototype GET /prototypes/:id(.:format) prototypes#show 22
試したこと
・”画像クリック 詳細ページ”などでネット検索をした
・カリキュラムを読んだ
・show.html.erb内のimage tagメソッドのURLの指定がおかしい?と仮説しています。カリキュラムやその周辺も読んでみたものの、行き詰まってしまい、かなり時間も経ってしまったので質問させていただきました。
補足情報(FW/ツールのバージョンなど)
Rails 6.0.3.4
ruby 2.6.5
あなたの回答
tips
プレビュー