2008-12-02 8 views
4

Je suis aux prises ici avec un problème: j'ai un contrôleur des questions qui a une action nouvelle . Chaque fois que je dois créer une nouvelle question, je taperails de routage changement d'action du contrôleur

/questions/new 

Quels changements routes.rb dois-je faire pour changer l'URI

/questions/ask 

Merci. Valve.

Répondre

7

Essayez ceci:

map.ask_question '/questions/ask', :controller => 'questions', :action => 'new' 

Ensuite, vous aurez une route nommée et vous pouvez:

link_to "Ask a question", ask_question_path 
+0

Salut, Christian. Est-ce que cela me permettra de taper http: // mySite/questions/ask et d'aller à demander au contrôleur? Veuillez noter que j'essaie d'utiliser le routage RESTful. Merci, Valve. – Valentin

+0

La solution de Christian pointe http: // mySite/questions/ask à la nouvelle action dans QuestionsController, qui affichera (par défaut) app/views/questions/new.html.erb. Cela n'empêche pas les utilisateurs d'accéder à/questions/new pour obtenir le même résultat. –

+0

@Valve il ira au contrôleur de questions avec une action nouvelle. Il est en effet RESTful car vous utilisez à la fois l'URL et le type de requête. @Gaius vous avez raison. Pour empêcher les utilisateurs d'accéder à/questions/new, vous devez supprimer l'itinéraire par défaut à la fin du fichier routes.rb. –

0

Quelle version de rails?

Généralement, la route par défaut devrait attraper quelque chose comme /: controller /: action, donc vous pourriez simplement créer une méthode ask dans votre contrôleur de questions. Jetez un oeil à la documentation API pour named_route et map_resource si vous voulez quelque chose d'un peu plus facile à travailler.

+0

Bonjour, Jason. Rails 2.2.2. J'essaie d'utiliser le routage RESTful, donc j'ai supprimé les deux routes par défaut (controller/action/id et l'autre). Je m'attendrais à quelque chose comme map.resources: questions,: action => {: new =>: ask} si c'est possible. Merci. – Valentin

5

Si vous utilisez des itinéraires RESTful peut-être que vous souhaitez utiliser pour map.resources vos questions.

Pour renommer les urls d'action que vous pouvez faire:

map.resources :questions, :path_names => { :new => 'ask', :delete => 'withdraw' }

(ajoutai-je supprimer pour le bien de l'exemple)

Questions connexes