2016-11-07 2 views
0

Je veux créer des chemins de rails à la main plutôt que d'utiliser le resource :tasks automatique (c'est juste un exercice, je vais revenir à l'utilisation des ressources: tâches une fois que je Comprenez cela). I/think/que j'ai la bonne syntaxe, mais les préfixes (path_helpers) générés lorsque j'écris les routes à la main sont faux. Pourquoi, et que ne fais-je pas correctement?Rails: routes générées à la main ont préfixe différent de ceux créés avec des ressources

Voici mon code:

Rails.application.routes.draw do 
     root to: 'tasks#index' 
     get 'tasks', to: 'tasks#index' 
     get 'tasks/:id', to: 'tasks#show' 
     get 'tasks/new', to: 'tasks#new' 
     post 'tasks', to: 'tasks#create' 
     get 'tasks/:id/edit', to: 'tasks#edit' 
     patch 'tasks/:id', to: 'tasks#update' 
     delete 'tasks/:id', to: 'tasks#destroy' 
end 

Voici les itinéraires & préfixes crée quand je l'appelle rails routes dans mon terminal:

Prefix Verb URI Pattern    Controller#Action 
    root GET /      tasks#index 
    tasks GET /tasks(.:format)   tasks#index 
      GET /tasks/:id(.:format)  tasks#show 
tasks_new GET /tasks/new(.:format)  tasks#new 
      POST /tasks(.:format)   tasks#create 
      GET /tasks/:id/edit(.:format) tasks#edit 
      PATCH /tasks/:id(.:format)  tasks#update 
      DELETE /tasks/:id(.:format)  tasks#destroy 

Voici ce que je reçois lorsque j'utilise resource :tasks

Prefix Verb URI Pattern    Controller#Action 
    tasks GET /tasks(.:format)   tasks#index 
      POST /tasks(.:format)   tasks#create 
new_task GET /tasks/new(.:format)  tasks#new 
edit_task GET /tasks/:id/edit(.:format) tasks#edit 
    task GET /tasks/:id(.:format)  tasks#show 
      PATCH /tasks/:id(.:format)  tasks#update 
      PUT /tasks/:id(.:format)  tasks#update 
      DELETE /tasks/:id(.:format)  tasks#destroy 

EDIT:

Pour répondre à quelques-unes des réponses: Je sais que je peux utiliser 'as' pour nommer les préfixes, mais je pense que je ne devrais pas avoir à le faire dans ce cas. D'après ce que je comprends, 'as' est seulement utilisé au cas où vous voulez changer le préfixe standard à un préfixe personnalisé, ou si vous pensez que vos itinéraires pourraient changer à l'avenir et vous ne voulez pas risquer de jouer avec votre aides. Je devrais toujours obtenir les préfixes corrects sans utiliser 'as'. Ici, cependant, le préfixe tasks_new avec la méthode get est à la fois lié aux méthodes # new et tasks # edit, ce que je ne trouve pas correct.

+0

Tout comme un petit add-on, si vous voulez garder une trace de vos routes et préfixes au cours du développement, vous pouvez ajouter ce petit bijou: https://rubygems.org/gems/restful_routing – Casey

Répondre

0

Les rails vous permettront de nommer les itinéraires. Par exemple:

get 'tasks/new', to: 'tasks#new', as: :new_task

+0

Je sais que je peux utiliser 'as' pour nommer les routes, mais je pense que je ne devrais pas dans ce cas. D'après ce que je comprends, 'as' est seulement utilisé au cas où vous voulez changer le préfixe standard à un préfixe personnalisé, ou si vous pensez que vos itinéraires pourraient changer à l'avenir et vous ne voulez pas risquer de jouer avec votre aides. Je devrais toujours obtenir les préfixes corrects sans utiliser 'as'. Ici, cependant, le préfixe tasks_new avec la méthode get est à la fois lié aux méthodes # new et tasks # edit, ce que je ne trouve pas correct. – Lauraponi

+0

Mais vous devriez utiliser 'resources'. Vous attendez que les rails analysent chaque méthode get au cas où elle irait à la nouvelle méthode dans le contrôleur. Et si vous aviez 'get 'tasks/something', à: 'tasks # new'' devrait-il être' new_task_path' ou 'something_task_path'. Il ajouterait des frais généraux pour imo aucun avantage discernable –

+0

Je sais. Comme je l'ai dit au début de ma question, «c'est juste un exercice, je vais revenir à l'utilisation des ressources: les tâches une fois que je comprends cela». Bien que cela ne soit pas efficace, cela devrait fonctionner, alors j'essaie de comprendre pourquoi ce n'est pas le cas. – Lauraponi

0

Utilisez comme pour nommer la route. Ecrire le code comme suit:

Rails.application.routes.draw do 
     root 'tasks#index' 
     get 'tasks' => 'tasks#index', as: 'task_list' 
     get 'tasks/:id' => 'tasks#show', as: 'display_task' 
     get 'tasks/new' => 'tasks#new', as: 'task_new' 
     post 'tasks' => 'tasks#create', as: 'task_create 
     get 'tasks/:id/edit' => 'tasks#edit', as: 'task_edit' 
     patch 'tasks/:id', to: 'tasks#update' 
     delete 'tasks/:id', to: 'tasks#destroy' 
end 
+0

Je sais que je peux utiliser 'as' pour nommer les routes, mais je pense que Je ne devrais pas avoir à le faire dans ce cas.D'après ce que je comprends, 'as' est seulement utilisé au cas où vous voulez changer le préfixe standard à un préfixe personnalisé, ou si vous pensez que vos itinéraires pourraient changer à l'avenir et vous ne voulez pas risquer de jouer avec votre aides. Je devrais toujours obtenir les préfixes corrects sans utiliser 'as'. Ici, cependant, le préfixe tasks_new avec la méthode get est à la fois lié aux méthodes # new et tasks # edit, ce que je ne trouve pas correct. – Lauraponi