見出し画像

PicTweet 投稿者本人のみに編集・削除を許可しよう

ユーザーログインの有無で表示を変える実装

>>「deviseのメソッドを使用し、ユーザーのログインの有無で表示を変える」など、アプリ制作において使用頻度の高い分岐を体験し、理解しよう!

ログイン中のユーザー情報取得

投稿者本人か確認して表示を変えよう

今のPictweetの状態だと、誰でも他ユーザーが投稿したツイートを編集・削除できてしまう💦💦大変・・・。

「ユーザーがログインしている」かつ「投稿したユーザーである投稿だけに許可」という実装をする。

app/views/tweets/index.html.erb ファイルへ
<div class="contents row">
<% @tweets.each do |tweet| %>
<div class="content_post" style="background-image: url(<%= tweet.image %>);">
<div class="more">
<span><%= image_tag 'arrow_top.png' %></span>
<ul class="more_list">
<li>
<%= link_to '詳細', tweet_path(tweet.id) %>
</li>

<% if user_signed_in? && current_user.id == tweet.user_id %> ←ここのif文追加
<li>
<%= link_to '編集', edit_tweet_path(tweet.id) %>
</li>
<li>
<%= link_to '削除', tweet_path(tweet.id), data: { turbo_method: :delete } %>
</li>
<% end %> ←忘れずに閉じる

</ul>
</div>
<p><%= tweet.text %></p>
<span class="name">
<a href="/users/<%= tweet.user.id %>">
<span>投稿者</span><%= tweet.user.nickname %>
</a>
</span>
</div>
<% end %>
</div>

【補足】
条件A && 条件Bとなっていた場合、条件Aと条件Bが共に真の場合のみtrueが返され、その後の処理が実行

current_user.id == tweet.user_idと記述することで、「現在ログインしているユーザー」と「ツイートを投稿したユーザー」が同じか否かを判定

app/views/tweets/show.html.erb ファイル

<div class="contents row">
<div class="content_post" style="background-image: url(<%= @tweet.image %>);">

↓ここのif文追加
<% if user_signed_in? && current_user.id == @tweet.user_id %>
<div class="more">
<span><%= image_tag 'arrow_top.png' %></span>
<ul class="more_list">
<li>
<%= link_to '編集', edit_tweet_path(@tweet.id) %>
</li>
<li>
<%= link_to '削除', tweet_path(@tweet.id), data: { turbo_method: :delete } %>
</li>
</ul>
</div>
<% end %>
↑忘れずに閉じる


<p><%= @tweet.text %></p>
<span class="name">
<a href="/users/<%= @tweet.user.id %>">
<span>投稿者</span><%= @tweet.user.nickname %>
</a>
</span>
</div>
</div>

確認用URL
http://localhost:3000

この記事が気に入ったらサポートをしてみませんか?