Rails6で編集削除のボタンや権限を投稿者のみに表示する方法

編集削除のボタンや権限を投稿者のみに表示する方法

Rails6で編集削除のボタンや権限を投稿者のみに表示する方法を実装していきます。

投稿機能はscaffoldではなく、独自に作りました。(ほぼ内容はscaffoldと同じですが、、、)

バージョンと仕様

  • ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin19]
  • Rails 6.1.0
  • devise (4.7.3)
  • gem 3.0.3

投稿者のみに編集削除ボタンを表示させる

<h1><%= @user.username %>のユーザーページ</h1>
<h2>メールアドレス</h2>
<%= @user.email %>
<ul>
  <% @user.posts.each do |post| %>
  <li>
    <%= post.title %><br>
    <%= link_to '詳細', post_path(post.public_uid) %> |
    <% if user_signed_in? && current_user.id == post.user_id %>
      <%= link_to '編集', edit_post_path(post.public_uid), data: {"turbolinks" => false} %> |
      <%= link_to '削除', post_path(post.public_uid), method: :delete, data: { confirm: '本当にいいですか?' } %>
    <% end %>
  </li>
  <% end %>
</ul>

投稿者のみに編集削除の権限を与える

posts_controller.rbに下記を追加します。

before_action :baria_user, only: [:edit, :destroy]
private
    def baria_user
      unless Post.find_by(public_uid: params[:id]).user_id == current_user.id
        flash[:notice] = "権限がありません"
        redirect_to posts_path
      end
    end

僕の場合は、投稿記事のURLをidではなく、「ab3a635855051291cfe8」のような乱数にしているため、Post.find_by(public_uid: params[:id])となっています。

これで、投稿者のみが編集や削除が可能になります。

権限がありません

以上です。

他にもこんな記事があります!