2009-08-23 7 views
2

J'ai quelques contrôleurs RESTful et ai ajouté une méthode personnalisée à application_controller. Je n'ai rien changé dans les routes pour indiquer cette nouvelle méthode. La méthode est poll_memos. Je suis entré dans l'URL suivante:problème de routage des rails

/groups/1234/poll_memos

Je reçois l'erreur suivante:

Unknown action

No action responded to 1234. Actions: create, destroy, edit, index, new, poll_memos, show, and update

Deux questions: Depuis que je n'ai pas modifié les itinéraires COMMEnT rails connaissent poll_memos? Deuxièmement, puisqu'il semble en être informé, pourquoi cela ne fonctionne-t-il pas?

Répondre

1

Je ne pense pas que ce soit une route reposante que les rails génèrent automatiquement. Cela signifie que vous devrez l'ajouter vous-même.

Regardez ce question et ce one.

Et c'est dans les actions parce que c'est dans le contrôleur, le message d'erreur est juste l'impression de toutes les actions.

1

L'URL correcte est/groups/poll_memos/1234. Dans votre exemple, les rails pensent que vous essayez d'appeler la méthode de contrôleur appelée "1234", qui est absente, bien sûr.

Rails connaît les poll_memos car le code qui imprime le message d'erreur se penche sur le code du contrôleur, pas sur le routage. Vous pouvez définir des routes de manière à indiquer qu'il existe une méthode poll_memos, mais que vous ne pouvez pas y accéder via une URL.

1

C'est parce que vous êtes le plus déclenchez probablement la route par défaut:

map.connect ':controller/:action/:id' 

Votre URL

/groups/1234/poll_memos 

tracerait comme suit:

{:controller => "groups", :action => "1234", :id => "poll_memos"} 

En outre, comme vous utilisez un style reposant dont vous avez besoin pour configurer l'itinéraire. Pour que les notes de vote fonctionnent sur les éléments de la collection, vous devez modifier vos itinéraires afin de les mapper comme suit:

map.resources :groups, :member => {:poll_memos => :get}