2010-09-23 3 views
2

Je voudrais utiliser la méthode jQuery ajax $ .get pour accéder à une route reposante dans les rails. Quelque chose comme ça (gardez à l'esprit cela se fait dans un modèle de haml où je peux utiliser l'interpolation de chaîne):Comment utiliser les aides à l'acheminement des rails avec jQuery?

$(function(){ 
    $(':radio').change(function(){ 
    $.get("#{edit_steps_path(N)}"); 
    } 
}); 

Dans l'extrait ci-dessus #{steps_path(N)} interpole à l'URL "\steps\N" et N est la valeur du bouton radio qui a été changé.

De toute évidence, cela ne fonctionne pas car l'interpolation de chaîne se produit sur le serveur avant que le bouton radio puisse déclencher l'événement de modification. Il est clair que mon approche de ce problème est complètement fausse.

J'ai trouvé d'autres façons de résoudre ce problème, mais aucune d'entre elles ne me permet d'utiliser les assistants de routage Rails ou l'interpolation de chaînes, et je suis plutôt déterminé à le faire.

Je suppose qu'il y a une bonne façon d'accomplir ce que je cherche, mais je ne sais pas ce que c'est.

Répondre

0

Vous pouvez utiliser quelque chose comme ceci:

$(function(){ 
     $(':radio').change(function(){ 
     $.get("#{steps_path}/" + $(':radio:checked').val()); 
     } 
    }); 

Ce qui vous permet d'obtenir les données via js.

Cependant, ce n'est probablement pas la meilleure solution. D'autant plus que vous semblez vouloir faire un POST plutôt qu'un GET (à partir du texte de votre question).

Et vous avez raison, vous êtes toute la méthode de traiter cela est probablement défectueux. Mieux (IMHO) d'utiliser JS et de construire une structure de route qui vous permet de coder votre JS plutôt que d'essayer de chausse les aides de route dans le mélange. Vous ne pouvez pas utiliser les aides à la route de JS comme vous le souhaitez.

+0

L'assistant d'acheminement place une valeur par défaut dans le chemin si un paramètre n'est pas passé (par exemple: edit_step_path rendements/steps/1/edit, où edit_step_path (12) donne/steps/12/edit. – rswolff

0

Pourquoi ne pas faire quelque chose comme

<% steps.each_with_index do |step, n| %> 
    <%= radio_button(object_name, method, steps_path(n)) %> 
<% end %> 

C.-À faire la valeur du bouton radio l'URL que vous voulez soumettre?

Nimai

+0

mon code pourrait être un peu hors, je ne l'ai pas lu, mais vous avez l'idée générale. – nimms

0

Vous pouvez passer un jeton « magique » comme id, puis utilisez javascript remplacer le jeton avec l'identifiant réel. Quelque chose comme:

$(function(){ 
    $(':radio').change(function(){ 
    $.get("#{edit_steps_path('__id__')}".replace('__id__',$(this).data('rails-id)); 
    } 
}); 

Cela suppose que vous avez un data-rails-id attributs contenant l'identifiant de rails sur les boutons radio. Bien sûr, une telle technique ne fonctionnera pas pour les assistants url polymorphes.

Questions connexes