2016-06-30 10 views
0

Ich benutze das Devise Juwel mit Schienen und ich habe eine Artikel-Seite mit Tasten, die mit HomeEdit und Destroy verknüpfen. Wenn ein Benutzer, der das Objekt nicht erstellt hat, versucht, das Objekt zu bearbeiten oder zu zerstören, erhält er eine Fehlermeldung und das Objekt wird nicht bearbeitet oder zerstört.Devise Authentifizierung nicht ausblenden Update/Destroy Buttons

Obwohl ich möchte es so, dass, wenn ein Benutzer, der nicht ein bestimmtes Element erstellt wurde angemeldet ist, können sie nicht die Schaltflächen Bearbeiten oder Löschen auf diesem Element anzeigen.

Derzeit habe ich diese if-Anweisung, die ich dachte, würde funktionieren, aber es funktioniert nur, wenn ein Benutzer überhaupt nicht angemeldet ist. Wenn jemand angemeldet ist, der das Objekt nicht erstellt hat, können die Schaltflächen zum Bearbeiten und Löschen weiterhin angezeigt werden.

show.html.erb if-Anweisung:

<%= 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 %> 

Und in den Artikel-Controller das sind die Eigenschaften vor:

before_action :find_item, only: [:show, :edit, :update, :destroy] 
before_action :authorized_user, only: [:edit, :update, :destroy] 
before_filter :authenticate_user!, except: [:index, :show] 

Methode erstellen in der Steuerung:

def create 
    @item = current_user.items.build(items_params) 

     if @item.save 
      redirect_to @item 
     else 
      render "new" 
     end 
end 

Die Der Controller funktioniert so, wie er sollte, und verhindert Benutzer, die nicht angemeldet sind oder den Artikel nicht erstellt haben e um es zu löschen oder zu bearbeiten. Die Schaltflächen können zwar immer noch angeklickt werden, wenn ein Benutzer angemeldet ist, das Element jedoch nicht erstellt wurde.

Wer kann helfen?

Antwort

1

Links nur anzeigen, wenn der Benutzer angemeldet ist und das Element erstellt hat.

Sie haben Ihr Modell assosiations für ausführlichere Antwort nicht zur Verfügung gestellt, sondern versuchen, das zu tun nächste:

<%= 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 %> 

Bitte zu beachten, dass ich Sie gerade angenommen haben Verfahren wie dieses @item.created_by(current_user)

UPDATE

Das sollte funktionieren

<%= 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

Entschuldigung Ja, ich hätte die create-Methode veröffentlichen sollen. Ich habe meine Frage mit der create-Methode aktualisiert. Denkst du, du könntest deine Antwort mit diesen aktualisierten Informationen bearbeiten? –

+0

Ich habe meine Antwort aktualisiert. Bitte guck dir das an. – retgoat

+0

Das hat super geklappt, Kumpel –

Verwandte Themen