###解決したい事
一覧ページから詳細ページに移動したいのですが、うまくいきません。
###ソースコード
users/show.html.erb
ruby
1<div class="container"> 2 <h2 style="text-align: center;"><%= @user.name %>の投稿一覧</h2> 3 <div class="center-block"> 4 <%= link_to "写真詳細ページ", photo_path(@photo.id) %> 5 <% @photos.each do |photo| %> 6 <div><a href="<%= photo_path %>">写真の詳細ページ</a></div> 7 <div style="border: 2px solid;"> 8 <%= image_tag photo.image.url if photo.image? %> 9 <%= photo.content %> 10 </div> 11 <% end %> 12 </div> 13</div>
photos/show.html.erb
ruby
1<p id="notice"><%= notice %></p> 2<div class="row"> 3 <div class="offset-md-3 col-md-5"> 4 <p> 5 <%= image_tag @photo.image.url if @photo.image? %> 6 </p> 7 <p> 8 <strong>クイズの問題:</strong> 9 <%= @photo.content %> 10 </p> 11 <%= link_to "回答する", new_photo_answer_path(@photo) %> 12 13 <ul class="list-unstyled"> 14 <% @answers.each do |answer| %> 15 <li class="media"> 16 <div class="media-body"> 17 <div> 18 <%= answer.user.name %> 19 </div> 20 <div> 21 <%= answer.content %> 22 </div> 23 </div> 24 </li> 25 <% end %> 26 </ul> 27 </div> 28</div> 29 30<%= link_to '戻る', photos_path %> | 31<%= link_to '編集', edit_photo_path(@photo) %> 32
users_controller.rb
ruby
1class UsersController < ApplicationController 2 before_action :require_user_logged_in, only: [:show] 3 def index 4 end 5 6 def show 7 @user = User.find(params[:id]) 8 @photos = @user.photos.order(id: :desc).page(params[:page]) 9 end 10 11 def new 12 @user = User.new 13 end 14 15 def create 16 @user = User.new(user_params) 17 18 if @user.save 19 flash[:success] = 'ユーザを登録しました。' 20 redirect_to @user 21 else 22 flash.now[:danger] = 'ユーザの登録に失敗しました。' 23 render :new 24 end 25 end 26 27 private 28 29 def user_params 30 params.require(:user).permit(:name, :email, :password, :password_confirmation) 31 end 32end 33
photos_controller.rb
ruby
1class PhotosController < ApplicationController 2 before_action :set_photo, only: %i[ show edit update destroy ] 3 4 # GET /photos or /photos.json 5 def index 6 @photos = Photo.all 7 end 8 9 # GET /photos/1 or /photos/1.json 10 def show 11 @photo = Photo.find(params[:id]) 12 @answers = @photo.answers 13 @answer = current_user.answers.new 14 end 15 16 # GET /photos/new 17 def new 18 @photo = Photo.new 19 end 20 21 # GET /photos/1/edit 22 def edit 23 end 24 25 # POST /photos or /photos.json 26 def create 27 @photo = current_user.photos.new(photo_params) 28 29 if @photo.save 30 flash[:success] = '投稿に成功しました。' 31 redirect_to photos_path 32 else 33 flash.now[:danger] = "投稿に失敗しました。" 34 render :new 35 end 36 end 37 38 # PATCH/PUT /photos/1 or /photos/1.json 39 def update 40 respond_to do |format| 41 if @photo.update(photo_params) 42 format.html { redirect_to @photo, notice: "Photo was successfully updated." } 43 format.json { render :show, status: :ok, location: @photo } 44 else 45 format.html { render :edit, status: :unprocessable_entity } 46 format.json { render json: @photo.errors, status: :unprocessable_entity } 47 end 48 end 49 end 50 51 # DELETE /photos/1 or /photos/1.json 52 def destroy 53 @photo.destroy 54 respond_to do |format| 55 format.html { redirect_to photos_url, notice: "Photo was successfully destroyed." } 56 format.json { head :no_content } 57 end 58 end 59 60 private 61 # Use callbacks to share common setup or constraints between actions. 62 def set_photo 63 @photo = Photo.find(params[:id]) 64 end 65 66 # Only allow a list of trusted parameters through. 67 def photo_params 68 params.require(:photo).permit(:image, :content) 69 end 70end 71
routes.rb
ruby
1Rails.application.routes.draw do 2 3 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 4 root to: 'toppages#index' 5 6 get 'login', to: 'sessions#new' 7 post 'login', to: 'sessions#create' 8 delete 'logout', to: 'sessions#destroy' 9 10 get 'signup', to: 'users#new' 11 resources :photos do 12 resources :answers, only: [:create, :new] 13 end 14 resources :users, only: [:index, :show, :create] 15end 16
users/show/html.erbからphotos/show.html.erbに移動したいのですが、エラーが出てしまいうまくいきません。
エラーメッセージ
ActionView::Template::Error (undefined method `id' for nil:NilClass): 1: <div class="container"> 2: <h2 style="text-align: center;"><%= @user.name %>の投稿一覧</h2> 3: <div class="center-block"> 4: <%= link_to "写真詳細ページ", photo_path(@photo.id) %> 5: <% @photos.each do |photo| %> 6: <div><a href="<%= photo_path %>">写真の詳細ページ</a></div> 7: <div style="border: 2px solid;"> app/views/users/show.html.erb:4:in `_app_views_users_show_html_erb___4171669809949038165_46961492423160'
###補足
原因はおそらくidが受け渡されてないからだと思いますが、どうやってもうまくいきません。
足りないコードがあれば載せます。
ご教授お願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/23 23:00
2021/04/23 23:11