8
votes

Rails button_to appelle une action postale, essayant d'appeler une action

J'ai un button_to que je veux effectuer une action de mise (il n'y a qu'une seule chose qui peut être mise à jour à propos de cette ressource - elle sera mise à jour comme étant "acquittée", il n'y a donc pas d'autres champs de formulaire associés à la mise au point de la action).

Ceci est à mon avis (le contrôleur est donné explicitement parce que le bouton est sur une vue appartenant à un autre contrôleur): xxx

dans mon fichier de routes, la ressource a été déclaré comme une ressource reposante: xxx

Le contrôleur de cette ressource a une action de création et une mise à jour, et la touche_to ci-dessus appelle l'action Créer. Je veux que cela appelait l'action de mise à jour.

Ceci passe à travers le journal droit avant que la création d'acte incendie: xxx


0 commentaires

3 Réponses :


19
votes

Votre syntaxe est légèrement éteinte. BOUTON_TO CODE> prend trois arguments: The Button Titre, une option Options CODE> HASH et un HTML_OPTIONS CODE> HASH. : Méthode =>: Mettez code> doit entrer dans HTML_OPTIONS CODE>, tandis que les paramètres d'itinéraire doivent entrer dans les options code>. Donc, vous pouvez réécrire comme si:

<%= button_to "Acknowledged", { :controller => 'practice_sessions',
  :id => @practice_session.id}, 
  :method => :put %>


4 commentaires

Salut, merci pour cela. Je ne reçois pas maintenant «aucun match d'itinéraire» / pratique_sessions ». Je pense que c'est parce que c'est en train de mettre juste / pratique_sessions (comme l'URL par l'URL localhost: 3000 / Pratique_Sessions? ID = 26 ) plutôt que / pratique_sessions / 26 Dans ce cas. Je continuerai à jouer avec ça, mais tous les conseils appréciés!


Quelle est la sortie des itinéraires râteau ?


Semble comme prévu. Voici les lignes que j'imagine sont d'intérêt: Pratique_Session Mettez /practice_sessions/udid(.:Format) {: action => "mise à jour" ,: contrôleur => "pratique_sessions"} pratique_sessions post /practice_sessions(.:Format) {: action => "créer" ,: contrôleur => "pratique_sesstions"}


J'ai fini par résoudre le problème avec des itinéraires nommés (voir ma réponse), mais j'apprécie votre contribution - cela m'a mis sur la bonne voie.



1
votes

Vous devrez peut-être explicitement passer le : méthode =>: mettre l'argument dans le HTML_OPTIONS HASH - Il peut s'agir d'obtenir globbed dans les options > Hash.

Essayez ceci: xxx

(notez les bretelles explicites autour de : contrôleur et : ID )


1 commentaires

Hé, cela ne fonctionnerait pas pour moi (voir ma réponse à Zetic), mais j'ai fini par résoudre l'utilisation de itinéraires nommés (voir ma réponse). Merci pour votre contribution, j'aurais dû remarquer les arguments distincts de toute façon.



2
votes

À la fin, j'ai décidé d'aller avec l'approche plus reposante en utilisant des itinéraires nommés, ce qui semble fonctionner correctement. Je ne suis toujours pas sûr à 100% pourquoi l'autre méthode ne fonctionnerait pas, mais je ne pense pas que cela importe parce que cela semble à la fois a) plus bien rangé et b) plus conventionnel.

<%= button_to "Acknowledge", practice_session_path(@practice_session), :method => :put %>


0 commentaires