私はレールでDevise gemを使用しており、Home
Edit
とDestroy
にリンクしているアイテムページがあります。アイテムを作成していないユーザーがアイテムを編集または破棄しようとすると、エラーメッセージが表示され、そのアイテムは編集または破棄されません。Devits認証が更新/破棄ボタンを隠していない
特定のアイテムを作成していないユーザーがログインしている場合、そのアイテムの[編集]ボタンまたは[破棄]ボタンを表示できないようにしたいと思います。
現在、私はこのif文を使用していますが、ユーザーがまったくログインしていない場合にのみ機能します。アイテムを作成していない誰かがサインインしている場合でも、編集ボタンと破棄ボタンを表示できます。
show.html.erb if文:
<%= link_to "Home", root_path, class: "btn btn-sm btn-default" %>
<% if current_user %>
<%= link_to "Edit", edit_item_path(@item), class: "btn btn-sm btn-default" %>
<%= link_to "Delete", item_path(@item), method: :delete, data: { confirm: "Are you sure?" }, class: "btn btn-sm btn-default" %>
<% end %>
やアイテムにこれらのプロパティの前にあるコントローラ:
before_action :find_item, only: [:show, :edit, :update, :destroy]
before_action :authorized_user, only: [:edit, :update, :destroy]
before_filter :authenticate_user!, except: [:index, :show]
は、コントローラのメソッドを作成します。
def create
@item = current_user.items.build(items_params)
if @item.save
redirect_to @item
else
render "new"
end
end
コントローラは、サインインしていない、またはablではないアイテムを作成していないユーザを防ぎます。削除または編集します。ユーザーがサインインしてもボタンをクリックすることはできますが、アイテムを作成することはできません。
誰でも手伝いを知っていますか?
申し訳ありません。私はcreateメソッドを投稿する必要があります。 createメソッドで質問を更新しました。この更新された情報であなたの答えを編集できると思いますか? –
答えを更新しました。見てください。 – retgoat
それは素晴らしい感謝の仲間を働いた –