前提・実現したいこと
railsで投稿サイトを作っています。
if文で @current_user.id == @post.user_id という条件を実現させたいです。
それぞれ<%=@current_user.id%>、<%=@post.user_id%>とやると、どちらも同じ数字が出るのでできるはずなのですが条件に適した表示がされません。
該当のソースコード
html
1<div class="individual-post"> 2 <div class="show-up"> 3 <div class="post-title"> 4 <%=@post.title%> 5 </div> 6 <div class="show-user"> 7 <img src="<%="/user_images/#{@post.user.image_name}"%>"> 8 <%=link_to("#{@post.user.name}","/users/#{@post.user_id}")%> 9 </div> 10 </div> 11 <div class="post-genre"> 12 <span>ジャンル:</span> 13 <%=@post.genre%> 14 </div> 15 <div class="post-summary"> 16 <span>あらすじ:</span> 17 <%=@post.summary%> 18 </div> 19 <div class="post-impression"> 20 <span>感想:</span> 21 <%=@post.impression%> 22 </div> 23 <%if @post.user_id == @current_user.id%> <---ここ 24 <div class="post-destroy"> 25 <%=link_to("編集","/posts/#{@post.id}/edit",class:"edit")%> 26 <%=link_to("削除","/posts/#{@post.id}/destroy",{method: "post"})%> 27 </div> 28 <%end%> 29 </div>
posts.controller.rb
controller
1class PostsController < ApplicationController 2 3 before_action :authenticate_user,{only:[:new,:create,:show,:destroy,:edit,:update]} 4 before_action :check_post_user,{only:[:edit,:update,:destroy]} 5 6 def top 7 @posts=Post.all.order(created_at: :desc) 8 end 9 10 def new 11 @post=Post.new 12 end 13 14 def create 15 @post=Post.new( 16 title: params[:title], 17 genre: params[:genre], 18 summary: params[:summary], 19 impression: params[:impression], 20 user_id: @current_user.id 21 ) 22 if @post.save 23 redirect_to("/top") 24 else 25 render("/posts/new") 26 end 27 end 28 29 def show 30 @post=Post.find_by(id: params[:id]) 31 end 32 33 def action 34 @posts=Post.where(genre: "アクション") 35 end 36 37 def sf 38 @posts=Post.where(genre: "SF") 39 end 40 41 def fantasy 42 @posts=Post.where(genre: "ファンタジー") 43 end 44 45 def mystery 46 @posts =Post.where(genre: "サスペンス・ミステリー") 47 end 48 49 def comedy 50 @posts=Post.where(genre: "コメディ") 51 end 52 53 def horror 54 @posts=Post.where(genre: "ホラー") 55 end 56 57 def love 58 @posts=Post.where(genre: "恋愛") 59 end 60 61 def music 62 @posts=Post.where(genre: "ミュージカル・音楽") 63 end 64 65 def destroy 66 @post=Post.find_by(id: params[:id]) 67 @post.destroy 68 redirect_to("/top") 69 end 70 71 def edit 72 @post=Post.find_by(id: params[:id]) 73 end 74 75 def update 76 @post=Post.find_by(id: params[:id]) 77 @post.title=params[:title] 78 @post.genre=params[:genre] 79 @post.summary=params[:summary] 80 @post.impression=params[:impression] 81 if @post.save 82 redirect_to("/posts/#{@post.id}") 83 else 84 render("posts/edit") 85 end 86 end 87 88 #投稿の制限 89 def check_post_user 90 @post = Post.find_by(id: params[:id]) 91 if @post.user_id != @current_user.id 92 flash[:notice] = "権限がありません" 93 redirect_to("/top") 94 end 95 end 96 97end 98
application.controller.rb
controller
1class ApplicationController < ActionController::Base 2 3 before_action :set_current_user 4 5 #ログインユーザー 6 def set_current_user 7 @current_user = User.find_by(id: session[:user_id]) 8 end 9 #ログインしているユーザー制限 10 def login_user 11 if @current_user 12 redirect_to("/top") 13 flash[notice]="既にログインしています" 14 end 15 end 16 #ログインしていないユーザー制限 17 def authenticate_user 18 if @current_user ==nil 19 redirect_to("/top") 20 flash[:notice]="ログインしてください" 21 end 22 end 23 24 #マイページ制限 25 def check_mypage_user 26 if @current_user.id != params[:id].to_i 27 redirect_to("/top") 28 flash[:notice]="権限がありません" 29 end 30 end 31end 32
試したこと
== を!=にすると表示はされますが、条件に合わなユーザーでも表示されるようになってしまう。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー