2016-06-30 5 views
0

私はレールでDevise gemを使用しており、HomeEditDestroyにリンクしているアイテムページがあります。アイテムを作成していないユーザーがアイテムを編集または破棄しようとすると、エラーメッセージが表示され、そのアイテムは編集または破棄されません。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ではないアイテムを作成していないユーザを防ぎます。削除または編集します。ユーザーがサインインしてもボタンをクリックすることはできますが、アイテムを作成することはできません。

誰でも手伝いを知っていますか?

答えて

1

ユーザーがサインインしてアイテムを作成した場合のみリンクを表示します。

あなたは、より詳細な回答のためにあなたのモデルassosiationsを提供するが、実行しようとしませんでした次:

<%= link_to "Home", root_path, class: "btn btn-sm btn-default" %> 
    <% if current_user && @item.created_by(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 %> 

私はちょうどあなたが持っていると仮定ことに注意してください。この@item.created_by(current_user)

UPDATEのような方法動作するはず

<%= link_to "Home", root_path, class: "btn btn-sm btn-default" %> 
    <% if current_user && current_user.items.include?(@item)%> 
    <%= 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 %> 
+0

申し訳ありません。私はcreateメソッドを投稿する必要があります。 createメソッドで質問を更新しました。この更新された情報であなたの答えを編集できると思いますか? –

+0

答えを更新しました。見てください。 – retgoat

+0

それは素晴らしい感謝の仲間を働いた –

関連する問題