Comment faire des appels Ajax avec Rails 3 en utilisant remote_function?
Je suis en train de faire un onchange appel à une boîte de sélection.Pour mon application, je suis en utilisant jquery.js et rails.js comme mentionné à faire usage de l'UJS. Mais toujours le code qui est généré est pour Prototype et pas de jquery, les appels ajax. Mon code ressemble à ce qui suit:
<%= select_tag :category,
options_for_select(
Category.find(:all,:select=>"name,id").collect{|c| [c.name,c.id]}),
:onchange => remote_function(:url => {:controller => "posts",
:action => "filter_post",
:filter =>"category"},
:with=>"'category_id=' + $('#category').val()") %>
Le code qui est généré par là, c'est:
new Ajax.Request('/posts/filter_posts?filter=category', {asynchronous:true, evalScripts:true,
parameters:'category_id=' + $('#category').val() + '&authenticity_token=' +
encodeURIComponent('CCyYj1wqXtddK6pUV6bAxw0CqZ4lbBxDGQHp13Y/jMY=')})
source d'informationauteur Hitesh Manchanda | 2010-07-26
Vous devez vous connecter pour publier un commentaire.
Que Sergei a dit: Il n'y a pas de remote_function dans rails 3.
La solution est d'discrètement ajouter le onchange gestionnaire en utilisant quelque chose comme:
Ce qui fera appel à la
action_name
méthode dans le contrôleur actuel, le résultat le passage deselected=...
en tant que paramètre. Maintenant, vous pouvez retourner un morceau de code javascript, en utilisant par exemple quelque chose comme:dans le contrôleur. La chaîne à ajouter à la "page" doit être du javascript valide et sera exécuté automatiquement si vous utilisez $.ajax.
EDIT: pour info, nous avons récemment ajouté un sélectionnez modifier l'aide de jquery-ujs, de sorte que vous pouvez faire cela de manière discrète en utilisant le haut-jquery-ujs adaptateur maintenant:
Mais pour être juste, sélectionnez l'ajout d'un événement de changement n'est vraiment pas toujours va être "discrète", car il n'est pas gracieux de secours pour les utilisateurs avec javascript désactivé, sauf si votre formulaire ne dépend pas du résultat de la requête AJAX.
Il n'y a pas de remote_function dans rails 3. Si vous utilisez jQuery, vous pouvez faire quelque chose comme ceci:
Suivant est le jQuery simple extrait de mon haml vue
Espère que cette aide.
Merci..
Si vous devez faire face au problème que j'ai eu de mise à niveau d'une grande application rails de rails 3, qui a fait un usage intensif de remote_function, vous pouvez obtenir limitée rétro-compatibilité par l'ajout d'un application_helper méthode qui génère jQuery code dans le format proposé par d'autres réponses ici. J'ai été en mesure d'utiliser ce code est tout de même eu à mettre à jour un morceau de code d'appel pour utiliser la nouvelle :la réussite des options de script à la place de l' :mise à jour de hachage option qui n'est pas pris en charge ici. Cela peut vous acheter un certain temps pour finalement refactoriser tous remote_function appels d'utiliser discrète jquery-ujs les rappels d'événement:
Appel Ajax pour les contrôleurs de l'action avec les paramètres: