Come si degradano con grazia "Data-Method = 'Delete'” di Rails 3?
Domanda
Rails 3 fa cose interessanti per rendere JavaScript discreto, quindi hanno fatto cose del genere:
= link_to "Logout", user_session_path, :method => :delete
.. Converte a
<a href="/logout" data-method="delete" rel="nofollow">Logout</a>
Ma mi è venuto in mente ... quando spengo JavaScript, il metodo non è più eliminato, è come previsto. Quindi ci sono piani per, o c'è un modo per consentirli data-
Attributi per degradare con grazia, in modo che il link sia ancora una richiesta di eliminazione?
Soluzione
Il cambiamento che hanno apportato in Rails 3 con questi data-
Gli attributi non riguardavano il grazioso degrado, si trattava di JavaScript discreto.
In Rails 2, specificando :method => :delete
Su un collegamento genererebbe un sacco di JavaScript in linea che creerebbe un modulo con un input nascosto e quindi inviare il modulo. È stato lo stesso di adesso: spegnere JavaScript e predefinito è una richiesta GET. Pertanto, supportare il caso di No JavaScript è lo stesso di prima.
Un'opzione è quella di utilizzare un modulo/pulsante anziché un collegamento in modo da poter includere il metodo come campo nascosto, proprio come fa i Rails 2 JavaScript. Un'altra opzione è quella di avere la versione GET portarti su una pagina intermedia che a sua volta ha il modulo/pulsante.
Il vantaggio del nuovo approccio è che è discreto. JavaScript per la modifica del verbo HTTP esiste in un file esterno e utilizza il data-
attributi per determinare a quali elementi dovrebbe essere allegato.
Altri suggerimenti
Piuttosto che usare il link_to
Metodo - che richiederebbe l'utilizzo di JavaScript per garantire che il metodo HTTP sia DELETE
-- utilizzare il button_to
metodo, che creerà un modulo con un elemento di input nascosto che dice alle Rails di trattare il metodo HTTP come DELETE
piuttosto che POST
. Se necessario, è quindi possibile utilizzare CSS per modellare il pulsante nel modulo in modo che sembri un collegamento.
L'unica possibilità che hai è definire una forma. Un link non può essere un post con _method = "elimina" senza javascript o per forma.
Non è possibile senza JavaScript.
Faccio un piccolo plug -in jQuery per la conversione data-method
Attributo Link a pseudo moduli nascosti (utilizzati nel progetto Laravel per esempio).
Se vuoi usarlo: https://github.com/ifnot/restfulizerjs