Question

Rails 3 fait quelques trucs cool pour faire Javascript discret, ils ont fait des choses comme ceci:

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

.. convertit

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

Mais il vient de se produire à moi .. Quand j'éteins javascript la méthode ne SUPPRIMER plus, il est prévu GET comme. Donc, est-il prévu, ou est-il possible de, permettre à ces data- attribue à se dégrader avec élégance, de sorte que le lien est encore une demande SUPPRIMER?

Était-ce utile?

La solution

Le changement qu'ils ont fait dans Rails 3 avec ces attributs data- était pas dégradé, il était sur le JavaScript discret.

Dans Rails 2, en spécifiant :method => :delete sur un lien générerait un tas de JavaScript en ligne qui créerait une forme avec une entrée cachée, puis soumettre le formulaire. Ce fut le même comme il est maintenant: désactiver JavaScript et il est par défaut à une requête GET. En tant que tel, en soutenant le cas de non JavaScript est le même que celui qu'il était avant.

L'une des options consiste à utiliser une forme / bouton au lieu d'un lien de sorte que vous pouvez inclure la méthode comme un champ caché, un peu comme les Rails 2 ne JavaScript. Une autre option est d'avoir la version GET vous amène à une page intermédiaire qui, à son tour a la forme / le bouton.

L'avantage de la nouvelle approche est qu'il est discret. Le JavaScript pour changer le verbe HTTP existe dans un fichier externe et utilise les attributs data- pour déterminer quels éléments il doit être attaché.

Autres conseils

Au lieu d'utiliser la méthode link_to - qui vous avez besoin de JavaScript utilisé pour faire en sorte que la méthode HTTP est DELETE - utiliser la méthode button_to, qui va créer une forme avec un élément d'entrée caché qui indique Rails pour traiter la méthode HTTP comme DELETE plutôt que POST. Si nécessaire, vous pouvez ensuite utiliser le style CSS pour le bouton sous la forme de sorte qu'il ressemble à un lien.

La seule chance que vous avez est de définir une forme. Un lien ne peut pas être un POST avec _method = « supprimer » sans Javascript ou par la forme.

Il est impossible sans javascript.

Je fais un petit plugin jQuery pour convertir attribut de lien de data-method aux pseudo formes cachées (utilisé dans le projet de Laravel par exemple).

Si vous voulez l'utiliser: https://github.com/Ifnot/RestfulizerJs

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top