2010-09-07 8 views
2

Je veux exécuter une chose simple. Lorsque l'utilisateur clique sur le lien jQuery doit générer une requête Ajax qui envoie l'ID de l'élément de lien à une méthode dans le contrôleur. Fondamentalement, je veux une belle fenêtre de dialogue modale lorsque l'utilisateur clique sur le lien de suppression. Cette fenêtre doit contenir diverses informations sur les éléments supprimés. E.g. Je peux sélectionner ce lien avec jquery et même ouvrir une boîte de dialogue lorsque l'utilisateur clique dessus. Grâce à application.js mais ce dont j'ai vraiment besoin est jQuery pour appeler ma méthode lorsque le lien est cliqué et dans ma méthode je répondrais via format.js. Dans le fichier js je place le code pour montrer le dialogue modal avec les paramètres requis. Toutes ces actions asynchonous via ajax ofcourse. Je ne peux pas générer la requête ajax à la méthode dans le contrôleur. Je ne sais pas déjà comment gérer la méthode jQuery.ajax, en particulier comment forcer jQuery à passer le paramètre url à la méthode rails. J'ai regardé les railscast et j'ai étudié l'exemple avec .post, mais je n'ai pas besoin de soumettre de formulaire. Tout conseil est apprécié. MercijQuery ajax appel dans Rails?

Répondre

6

Rails attend un message, avec un paramètre caché.

$('#delete').click(function(e){ 
    e.preventDefault(); 
    $.post($(this).attr('href'), { _method: 'delete' }); 
}); 
+0

Merci, c'était utile! – Dennis

1

Rails 3 a une façon discrète de le faire en utilisant un plugin jQuery:

http://github.com/rails/jquery-ujs 

Une fois que vous avez ce chargé dans votre mise en page (avec jQuery 1.4.1 ou plus récent), vous pouvez faire des interactions comme ça assez facilement.

<%= link_to 'delete', item, :remote => true, :method => :delete, 
     :confirm => 'Are you sure?' %> 

Dans Rails 3, ceci ajoute des attributs HTML à votre lien. Ceux-ci sont interceptés par les gestionnaires en ligne dans le plugin jQuery. Il est facile d'utiliser ce comportement dans un Rails 2 application, bien que:

<%= link_to 'delete', item, :'data-remote' => true, :'data-method' => :delete, 
     :'data-confirm' => 'Are you sure?' %> 

Notez que vous devez avoir le plugin jQuery chargé dans votre point de vue.

http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

Si vous avez besoin de la réponse initiale à un modal au lieu d'une alerte, vous pouvez faire le premier lien un peu plus simple:

<%= link_to 'delete', modal_confirm_item_url(item), :'data-remote' => true %> 

Vous pouvez lier à une pré-existante action des membres. Ou puisque vous pouvez éventuellement utiliser les réponses .js de ces actions pour répondre à d'autres requêtes ajax, il peut être judicieux de créer une nouvelle action pour gérer ce comportement.