前提・実現したいこと
簡単な画像投稿アプリを作成中です。
ユーザーの管理はdeviseで、プロフィールページは作りました。
で、投稿者の名前を押下すると、投稿した人のプロフィールページに遷移するようにしたいのですが、
恐らくusersコントローラーの@user = current_userが原因で、ログインユーザーのページに遷移します。
(パラメータは投稿した人のidなのですがshowアクションを経由したらcurrent_userで上書きになります)
※以下の書き込みと状況はほとんど同じなのですが、申し訳ありません、お力添えいただけたら幸甚です。
https://teratail.com/questions/25249
発生している問題・エラーメッセージ
パラメータは投稿した人のidですがshowアクションを経由したらcurrent_userで上書きになる。
※例えば、user_id=1の人が、user_id=2の人の名前を押下したら、
pathはusers/2ですが画面の表示はusers/1のプロフィールになる。
該当のソースコード
コントローラー
Rails
1class UsersController < ApplicationController 2 def show 3 @user = current_user 4 end 5 def favorites 6 @user = current_user 7 @favorites = Favorite.where(user_id: @user.id).all 8 end 9end
詳細画面のlink_to @stroll.user.nameを押下したら投稿した人のプロフィールページに遷移したい。
Rails
1<h1>詳細画面</h1> 2<%= image_tag @stroll.image.url %> 3<p><%= link_to @stroll.user.name, "/users/#{@stroll.user_id}" %></p> 4<p><%= @stroll.title %></p> 5<p><%= @stroll.content %></p> 6<% if current_user %> 7 <% unless @stroll.user_id == current_user.id %> 8 <% if @favorite.present? %> 9 <%= link_to 'お気に入りを解除する', favorite_path(id: @favorite.id), method: :delete, class: 'btn btn-danger' %> 10 <% else %> 11 <%= link_to 'お気に入りに登録する', favorites_path(stroll_id: @stroll.id), method: :post, class: 'btn btn-primary' %> 12 <% end %> 13 <% end %> 14<% end %> 15<%= link_to "一覧画面にもどる", strolls_path %>
プロフィールページ
Rails
1<h1><%= @user.name %>のページ</h1> 2<%= image_tag @user.profile_image.url if @user.profile_image && @user.profile_image.url%> 3<p><%= @user.profile %></p> 4<p><%= @user.name %></p> 5<p><%= @user.email %></p> 6 7<%= link_to 'プロフィール編集', edit_user_registration_path(@user) %> 8<%= link_to 'お気に入り一覧', favorites_user_path(@user.id) %> 9<%= link_to '一覧', strolls_path %>
試したこと
Usersコントローラーを少し書き直したところ、投稿者のプロフィールページにアクセスできました。
ただ、今度は自分のプロフィールページ(users_show_path)にアクセスしたらエラーになります。
Rails
1class UsersController < ApplicationController 2 before_action :set_user, only: %i(show) 3 def show 4 @strolls = @user.strolls 5 end 6 def favorites 7 @user = current_user 8 @favorites = Favorite.where(user_id: @user.id).all 9 end 10 private 11 def set_user 12 @user = User.find(params[:id]) 13 end 14end
エラーメッセージ
ActiveRecord::RecordNotFound in UsersController#show Couldn't find User without an ID private def set_user @user = User.find(params[:id]) end end
※https://teratail.com/questions/25249のとおりshowアクションだけコントローラーを直したところ、
Rails
1class UsersController < ApplicationController 2 def show 3 @user = User.find(params[:user_id]) 4 end 5 def favorites 6 @user = current_user 7 @favorites = Favorite.where(user_id: @user.id).all 8 end 9end
投稿者のプロフィールページにも自分のプロフィールページにもアクセスできませんでした(同じエラー)。
Rails
1ActiveRecord::RecordNotFound in UsersController#show 2Couldn't find User without an ID 3 4class UsersController < ApplicationController 5 def show 6 @user = User.find(params[:user_id]) 7 end 8 def favorites 9 @user = current_user
長文恐れ入りますが、何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー