2016-11-07 4 views
0

Я хочу создать маршруты маршрутов вручную, а не использовать автоматический resource :tasks (это просто упражнение, я вернусь к ресурсам using: задачи, как только я понимаю это).Rails: маршруты, созданные вручную, имеют разные префикс от созданных с помощью ресурсов

Я/думаю/что у меня есть правильный синтаксис, но префиксы (path_helpers), сгенерированные при написании маршрутов вручную, неверны. Почему, и что я не делаю правильно?

Вот мой код:

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 

Вот маршруты, & префиксы создает, когда я звоню rails routes в моем терминале:

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 

Вот что я получаю, когда я использую 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:

Чтобы ответить на несколько ответов: Я знаю, что я могу использовать «как» для обозначения префиксов, но я думаю, что в этом случае мне не нужно. Из того, что я понимаю, «как» используется только в том случае, если вы хотите изменить стандартный префикс на персонализированный, или если вы думаете, что ваши маршруты могут измениться в будущем, и вы не хотите рисковать, чтобы возиться с вашим хелперы. Я должен получить правильные префиксы, не используя «как». Здесь, однако, префикс tasks_new с методом get связан с задачами # new и задачами # edit, которые, как я считаю, не являются правильными.

+0

Подобно тому, как мало дополнения, если вы хотите, чтобы отслеживать маршруты и префиксы в процессе разработки, вы можете добавить этот драгоценный камень: https://rubygems.org/gems/restful_routing – Casey

ответ

0

Рельсы позволят вам назвать маршруты. Например:

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

+0

Я знаю, что я могу использовать «как» для обозначения маршрутов, но я думаю, что в этом случае мне не нужно. Из того, что я понимаю, «как» используется только в том случае, если вы хотите изменить стандартный префикс на персонализированный, или если вы думаете, что ваши маршруты могут измениться в будущем, и вы не хотите рисковать, чтобы возиться с вашим хелперы. Я должен получить правильные префиксы, не используя «как». Здесь, однако, префикс tasks_new с методом get связан с задачами # new и задачами # edit, которые, как я считаю, не являются правильными. – Lauraponi

+0

Но вы должны использовать 'resources'. Вы ожидаете, что рельсы будут анализировать каждый метод get, если он переходит к новому методу в контроллере. Что делать, если у вас есть 'get 'tasks/something', для: 'tasks # new'' должно быть' new_task_path' или 'something_task_path'. Это добавит накладные расходы для imo без заметного преимущества –

+0

Я знаю. Как я уже сказал в начале моего вопроса: «Это всего лишь упражнение, я вернусь к ресурсам: задачи, когда я это понимаю». Хотя он может быть неэффективным, он все равно должен работать, поэтому я пытаюсь понять, почему это не так. – Lauraponi

0

Использование как для обозначения маршрута. Написать код следующим образом:

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

Я знаю, что я могу использовать 'as' для обозначения маршрутов, но я думаю, что Я не должен был в этом случае. Из того, что я понимаю, «как» используется только в том случае, если вы хотите изменить стандартный префикс на персонализированный, или если вы думаете, что ваши маршруты могут измениться в будущем, и вы не хотите рисковать, чтобы возиться с вашим хелперы. Я должен получить правильные префиксы, не используя «как». Здесь, однако, префикс tasks_new с методом get связан с задачами # new и задачами # edit, которые, как я считаю, не являются правильными. – Lauraponi