2016-11-18 4 views
1

Ich habe folgenden haml Code, der eine Taste erzeugt:Rails link_to Methode zerstört nicht aufgrund ungültiger Authentizität Token

= link_to 'Delete', 
     MODEL_path(MODEL), 
     class: 'data-type-button btn btn-negative', 
     data: { confirm: 'delete it now!!! ... ?' }, 
     method: :delete 

Nachdem die Löschtaste erzeugt drücken und über das Popup bestätigt, dass ich mit fortfahren will Beim Löschen werde ich auf einen Fehlerbildschirm gebracht. Dieser Bildschirm sagt mir, dass ich ein ungültiges Authentizitätstoken habe. Derselbe Code, in dem link_to durch button_to ersetzt wird, funktioniert jedoch ordnungsgemäß und das Element wird gelöscht.

Ich möchte dies ein link_to und keine button_to wegen der Art und Weise sein, dass die resultierenden up HTML-Codezeilen. Wie kann ich die link_to funktionieren?

Antwort

5

Bestätigen Sie, dass Sie das csrf-Meta-Tag in Ihrem Layout und im Abschnitt HTML HEAD haben.

= csrf_meta_tag 
+0

Können Sie das näher ausführen? Willst du damit sagen, dass wenn ich das in meine application.html.haml-Datei geschrieben habe, hätte ich keine dieser Probleme mit dem Authentifizierungs-Token gehabt? –

+1

Das Javascript der Methode link_to und delete verwendet das Header-Meta-Tag. 'button_to' fügt ein verstecktes Feld hinzu, um das Authentifizierungs-Token zu übergeben. – Swards

+0

@ThomasDeranek Dies sollte die akzeptierte Antwort sein, weil es der ideale Weg ist, damit umzugehen. – Kelvin

2

Wie sich herausstellt, übergibt link_to Parameter über den Inhalt innerhalb der Klammer nach dem Pfad. Also, um die Echtheit Token zu erhalten, als Parameter übergeben werden, während auch ein link_to verwenden, können Sie die folgende Änderung des Codes verwenden

= link_to 'Delete', 
     MODEL_path(id: MODEL.id, authenticity_token: form_authenticity_token), 
     class: 'data-type-button btn btn-negative', 
     data: { confirm: 'Delete it now!!! ... ?' }, 
     method: :delete 

Ich wusste, dass tatsächlich die Antwort, wenn ich die Frage gestellt, aber nachdem er Ich habe viel Zeit damit verbracht, das herauszufinden und die Lösung nicht direkt auf Google zu finden. Ich wollte meine Lösung posten, um anderen verlorenen Seelen zu helfen. Ich weiß nicht, ob das eine schlechte Übung auf dieser Website ist oder nicht, aber wenn es jemandem hilft, dann bin ich damit einverstanden.

+0

Ich fand, dass zwei Dinge nötig sind, um die Dstroy link_to Links zu erhalten zu arbeiten: (1) <% = javascript_include_tag:% Anwendung> im Abschnitt application.html.erb und (2) die authenticity_token, dass wird von Thomas hier vorgeschlagen. –

Verwandte Themen