0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

投稿の編集ボタンと削除ボタンの表示

Posted at

編集ボタンと削除ボタンが投稿した人物にしか表示できないようにする方法を教えます。

<div class="btn_list">
  <% if current_user && current_user.id == @shop.user_id %> <!-- ログインユーザーが投稿者である場合に表示 -->
    <div class="edit_btn">
      <%= link_to '編集', edit_shop_path(@shop) %>
    </div>
    <div class="del_btn">
      <%= link_to '削除', shop_path(@shop), method: :delete, data: { confirm: '本当に削除しますか?' } %>
    </div>
  <% end %>
  
  <div class="bookmark_btn">
    <% if current_user && current_user.bookmarks.exists?(shop_id: @shop.id) %>
      <%= link_to delete_bookmark_shop_path(@shop), method: :delete, class: "bookmark-btn" do %>
        <i class="fas fa-star bookmarked"></i>
      <% end %>
    <% else %>
      <%= button_to bookmark_shop_path(@shop), method: :post, class: "bookmark-btn" do %>
        <i class="far fa-star"></i>
      <% end %>
    <% end %>
  </div>
</div>

上記のコードでは、current_user が @shop.user(投稿者)と一致する場合にのみ、edit_btn と del_btn の部分が表示されます。それ以外の場合は非表示になります。
また、この場合はshopモデルをuserモデルと関連づけるには以下のコードを書きます。

class Shop < ApplicationRecord
  belongs_to :user
  # ... 他のコード ...
end

また、shops_controllerのcreateアクションも以下の様にします。

def create
  @shop = Shop.new(shop_params)
  @shop.user = current_user # ユーザーオブジェクトを関連付ける
  @shop.image.attach(params[:shop][:image]) if params[:shop][:image]
  tag_names = params[:shop][:tag_names].split(",")

  if @shop.save
    redirect_to shops_path, notice: '店の情報が登録されました'
  else
    render :new
  end
end

これにより、投稿で編集ボタンと削除ボタンが表示・非表示が可能となります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?