Pregunta

Rails 3 hace algunas cosas interesantes para que JavaScript sea discreto, por lo que han hecho cosas como esta:

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

..convertidos a

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

Pero se me ocurrió ... Cuando apago JavaScript, el método ya no es eliminado, es como se esperaba. También hay planes para, o hay alguna forma de permitir estos data- ¿Atributos para degradarse con gracia, por lo que ese enlace sigue siendo una solicitud de eliminación?

¿Fue útil?

Solución

El cambio que hicieron en Rails 3 con estos data- Los atributos no se trataban de una degradación elegante, se trataba de JavaScript discreto.

En Rails 2, especificando :method => :delete En un enlace generaría un montón de JavaScript en línea que crearía un formulario con una entrada oculta y luego enviaría el formulario. Eso fue lo mismo que es ahora: apagar JavaScript y el valor predeterminado es una solicitud GET. Como tal, apoyar el caso de No JavaScript es el mismo que antes.

Una opción es usar un formulario/botón en lugar de un enlace para que pueda incluir el método como un campo oculto, al igual que lo hace JavaScript Rails 2. Otra opción es que la versión Get lo lleve a una página intermedia que a su vez tiene el formulario/botón.

El beneficio del nuevo enfoque es que es discreto. El JavaScript para cambiar el verbo http existe en un archivo externo y utiliza el data- atributos para determinar a qué elementos debe estar unido.

Otros consejos

En lugar de usar el link_to Método: que requeriría que use JavaScript para garantizar que el método HTTP sea DELETE -- utilizar el button_to método, que creará un formulario con un elemento de entrada oculto que le indique a los rieles que traten el método HTTP como DELETE más bien que POST. Si es necesario, puede usar CSS para peinar el botón en el formulario para que parezca un enlace.

La única oportunidad que tienes es definir un formulario. Un enlace no puede ser una publicación con _method = "Eliminar" sin JavaScript o por forma.

No es posible sin JavaScript.

Hago un pequeño complemento jQuery para convertir data-method Atributo de enlace a formularios ocultos de pseudo (utilizado en el proyecto Laravel, por ejemplo).

Si quieres usarlo: https://github.com/ifnot/restfulizerjs

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top