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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

0回答

1463閲覧

投稿された画像をクリックしたら投稿者名やタイトルなどの詳細ページを表示したい

szkw

総合スコア1

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2021/01/02 00:12

編集2021/01/03 00:54

前提・実現したいこと

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

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問