2009-09-22 4 views
3

J'ai une application Rails avec une ressource "Route", et un contrôleur "Route" (à ne pas confondre avec Rails routes). Je l'ai configuré pour que les administrateurs du site (et seulement les administrateurs) puissent gérer la ressource "Route" via le contrôleur "Route", alors que les utilisateurs réguliers gèrent leurs routes avec un contrôleur "Myroute". Je veux que les deux contrôleurs utilisent le routage RESTful, mais j'ai des problèmes avec la fonction form_for dans la vue "edit" du contrôleur "Myroute".form_for tag pour une ressource avec deux contrôleurs différents et routage RESTful

Ma balise form pour la vue "modifier" du contrôleur "MyRoute" est actuellement:

<% form_for @route, :url => { :id => @route.id }, :html => { :method => :put } do |f| %> 

qui décide de ce qui suit:

<form action="/myroutes/44/edit" class="edit_route" id="edit_route_44" method="post"> 

Cela est inexact, puisque la forme de L'action doit aller à la méthode "create" et la méthode "edit" ne gère que les requêtes GET. De ce que je peux dire en regardant le HTML généré à partir des vues "Route", le formulaire doit faire une demande PUT à "/ myroutes/44"

Comment écrire une balise form_for pour qu'elle utilise RESTful routage pour rendre une demande PUT à la méthode "mise à jour" d'un contrôleur qui n'est pas le même que le modèle?

+0

Grande question! Ceci est vraiment utile lorsque vous traitez des routes admin/* parce que la convention de configuration commence à tomber en panne. Heureusement, ils vont rendre cela un peu plus intelligent dans 3.0 – DJTripleThreat

Répondre

8

Que diriez-vous:

<% form_for @route, :url => {:action => 'update', :id => @route.id }, 
:html => { :method => :put } do |f| %> 
1

se révèle cela fonctionne aussi:

<% form_for @route, :url => myroute_path(@route) do |f| %> 
Questions connexes