Rails3 button_to appelle une action POST, en essayant d'appeler les METTRE
J'ai un button_to que je veux effectuer une action (il n'y a qu'une seule chose qui peut être mise à jour à propos de cette ressource - il sera mis à jour comme étant "reconnu", donc il n'y a pas d'autres champs de formulaire associé avec la mise à feu de l'action).
C'est à mon avis (le contrôleur est donnée explicitement, car le bouton est sur un point de vue qui appartient à un autre contrôleur):
<%= button_to "Acknowledged", :controller => 'practice_sessions', :id => @practice_session.id, :method => :put %>
Dans mon fichier de routes, la ressource a été déclarée comme une bonne ressource:
resources :practice_sessions
Le contrôleur de cette ressource a un de créer et d'une action de mise à jour, et la button_to ci-dessus appelle l'action de création. Je veux appeler l'action de mise à jour.
Cela vient à travers le journal juste avant l'action de création feux:
Started POST "/practice_sessions?id=21&method=put" for 127.0.0.1 at 2010-11-17 08:52:46 +0000
Processing by PracticeSessionsController#create as HTML
Parameters: {"authenticity_token"=>"1EW0IlI38d0f4wST5azrCEZVZPfih7i0UvCGSF7eqbc=", "id"=>"21", "method"=>"put"}
Vous devez vous connecter pour publier un commentaire.
Votre syntaxe est légèrement décalé.
button_to
prend trois arguments: le titre du bouton, unoptions
de hachage, et unhtml_options
de hachage.:method=>:put
doit aller danshtml_options
, tandis que les paramètres de la route ont besoin d'aller dansoptions
. De sorte que vous pouvez réécrire comme suit:Lorsque l'utilisateur clique dessus, la demande doit être traitée par
PracticeSessionsController#update
rake routes
?En fin de compte j'ai décidé d'aller avec le plus reposant approche à l'aide de routes nommées, qui semble bien fonctionner. Je ne suis pas encore sûr à 100% pourquoi l'autre méthode ne fonctionne pas, mais je ne pense pas que c'est important parce que cela me semble à la fois a) plus de rangement, et b) de plus classique.
Vous pourriez avoir besoin de transmettre explicitement la
:method => :put
argument dans lehtml_options
de hachage - il peut-être globbed dans leoptions
de hachage.Essayez ceci:
(Note explicite des accolades autour de
:controller
et:id
)