36

Rails 3 ma jakieś fajne rzeczy, aby Javascript dyskretny, tak zrobili rzeczy tak:W jaki sposób "data-method =" delete "" degraduje Gracefully?

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

..converts do

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

Ale to właśnie przyszło mi do głowy .. Kiedy wyłączyć javascript metoda nie jest już DELETE, jest GET zgodnie z oczekiwaniami. Czy są więc plany, czy też jest jakiś sposób, aby te atrybuty mogły się zepsuć, więc link wciąż jest ŻĄDAMĄ?

Odpowiedz

37

Zmiana dokonana w Railsach 3 z tymi atrybutami data- nie dotyczyła zgrabnej degradacji, dotyczyła dyskretnego JavaScriptu.

W języku Rails 2 określenie :method => :delete w łączu wygenerowałoby cały szereg wbudowanych skryptów JavaScript, które utworzyłyby formularz z ukrytymi danymi wejściowymi, a następnie przesłały formularz. To było takie samo jak teraz: wyłącz JavaScript i domyślnie jest to żądanie GET. W związku z tym wspieranie przypadku braku JavaScript jest taki sam jak wcześniej.

Jedną opcją jest użycie formularza/przycisku zamiast linku, aby można było uwzględnić tę metodę jako ukryte pole, podobnie jak w przypadku JavaScript Rails 2. Inną opcją jest pobranie wersji GET do strony pośredniej, która z kolei ma formę/przycisk.

Zaletą nowego podejścia jest to, że nie rzuca się w oczy. JavaScript do zmiany czasownika HTTP istnieje w pliku zewnętrznym i wykorzystuje atrybuty data- do określenia, do których elementów ma być dołączony.

4

Jedyna szansa, jaką masz, to zdefiniowanie formularza. Link nie może być POST z _method = "delete" bez JavaScriptu lub formularza.

+0

może mieć ciąg kwerendy _method = usuń – myfreeweb

+0

może pracować, Tak prawej – shingara

21

Zamiast stosując metodę link_to - co wymagałoby użyć JavaScript, aby zapewnić, że metoda HTTP jest DELETE - zastosować metodę button_to, który będzie tworzyć formę z elementem wejściowym ukrytym który opowiada Rails traktować HTTP metoda jako DELETE zamiast POST. Jeśli to konieczne, możesz następnie użyć CSS do stylu przycisku w formularzu, aby wyglądał jak link.

+0

Ten pracował dla mnie, gdy sam odnośnik został załadowany po fakcie poprzez JavaScript, uniemożliwiające Szyny od zastąpienia go formularzem. Zakładam, że 'button_to' zadziałało, ponieważ zamienia je w formularz po stronie Ruby, zamiast w JavaScript po wczytaniu strony. Nigdy wcześniej nie słyszałem o "button_to", więc dziękuję! – LouieGeetoo

1

Nie jest to możliwe bez javascript.

Tworzę małą wtyczkę jQuery do konwersji atrybutu linku data-method do pseudo-ukrytych formularzy (na przykład w projekcie laravel).

Jeśli chcesz go używać? https://github.com/Ifnot/RestfulizerJs