36

Rails 3 hat einige coole Sachen Javascript unauffällig zu machen, so haben sie die Dinge so gemacht:Wie funktioniert "data-method = 'delete'" von Rails 3 "Graceful Degrade?

= link_to "Logout", user_session_path, :method => :delete 

..converts zu

<a href="/logout" data-method="delete" rel="nofollow">Logout</a> 

Aber mir gerade aufgetreten ist .. Als ich Javascript ausschalten Die Methode ist nicht mehr DELETE, sondern GET wie erwartet. Gibt es also Pläne, oder lassen sich diese data--Attribute ordnungsgemäß abbauen, so dass der Link immer noch eine DELETE-Anfrage ist?

Antwort

37

Die Änderung, die sie in Rails 3 mit diesen data- Attributen gemacht haben, war nicht über gradeful Degradierung, es ging um unaufdringliches JavaScript.

In Rails 2 würde die Angabe :method => :delete für einen Link eine ganze Reihe von Inline-JavaScript generieren, die ein Formular mit einer ausgeblendeten Eingabe erstellen und dann das Formular absenden würde. Das war das gleiche wie jetzt: Schalten Sie JavaScript aus und standardmäßig eine GET-Anfrage. Daher ist die Unterstützung für den Fall, dass kein JavaScript vorhanden ist, derselbe wie zuvor.

Eine Option besteht darin, ein Formular/eine Schaltfläche anstelle einer Verknüpfung zu verwenden, sodass Sie die Methode wie ein verborgenes Feld in die Methode Rails 2 integrieren können. Eine weitere Möglichkeit besteht darin, dass die GET-Version Sie zu einer Zwischenseite führt, die wiederum die Form/Schaltfläche hat.

Der Vorteil des neuen Ansatzes ist, dass es unauffällig ist. Das JavaScript zum Ändern des HTTP-Verbs existiert in einer externen Datei und verwendet die Attribute data-, um festzulegen, an welche Elemente es angehängt werden soll.

4

Die einzige Chance, die Sie haben, ist ein Formular zu definieren. Ein Link kann kein POST mit _method = "delete" ohne Javascript oder per Formular sein.

+0

es Query-String haben _method = löschen – myfreeweb

+0

können Werke, ja Sie mit der rechten – shingara

21

Anstatt die link_to Methode - die Sie JavaScript, um sicherzustellen, verwenden würde erfordern, dass die HTTP-Methode DELETE ist - verwenden Sie die button_to Methode, die eine Form mit einem verborgenen Eingabeelement zu schaffen, die Rails erzählt die HTTP zu behandeln Methode wie DELETE eher als POST. Bei Bedarf können Sie dann mit CSS die Schaltfläche im Formular so formatieren, dass sie wie ein Link aussieht.

+0

Das ist für mich gearbeitet, wenn die Verbindung selbst nach der Tat über JavaScript geladen wurde, verhindert Rails es durch das Formular ersetzen. Ich gehe davon aus, dass 'button_to' funktioniert, weil es nach dem Laden der Seite in ein Formular auf der Ruby-Seite der Dinge verwandelt wird, anstatt mit JavaScript. Ich hatte noch nie von 'button_to' gehört, also danke! – LouieGeetoo

1

Es ist nicht ohne Javascript möglich.

Ich mache ein kleines jQuery-Plugin zum Konvertieren data-method Link-Attribut zu Pseudo-versteckten Formen (zum Beispiel in Laravel-Projekt verwendet).

Wenn Sie wollen, es zu benutzen: https://github.com/Ifnot/RestfulizerJs