2016-10-27 2 views
0

Я пытаюсь создать отдельный маршрут показать маршрут, чтобы использовать маршрутизацию по параметру :id. Для этого я создал маршрут ресурсов без показа маршрута, а также отдельное шоу маршрута:Rails 5 переименовать имя ресурса ресурса

resource :test, except: [:show] 
get 'test/*id', to: 'test#show', as: :test 

проблема заключается в том, что я получаю ошибку: You may have defined two routes with the same name using the: в option, or you may be overriding a route already defined by a resource with the same naming.

Если удалить as: :test это работает. rails routes показывает:

tests POST /tests(.:format) 
new_test GET /tests/new(.:format) 
edit_test GET /tests/:id/edit(.:format) 
    test PATCH /tests/:id(.:format)  <-- WHY?? 
      DELETE /tests/:id(.:format) 
      GET /tests/*id(.:format) 

, как вы можете видеть, resources переименован в PATCH маршрут :test. Если я удалю этот маршрут, маршрут DELETE называется test и т. Д. Как я могу остановить resources с использованием имени маршрута test? Я не могу переместить мой маршрут globbing над блоком resource, очевидно, потому что тогда все другие маршруты тоже замаскированы.

Что я хочу:

tests POST /tests(.:format) 
new_test GET /tests/new(.:format) 
edit_test GET /tests/:id/edit(.:format) 
      PATCH /tests/:id(.:format) 
      DELETE /tests/:id(.:format) 
    test GET /tests/*id(.:format) 

ответ

0

Я не понимаю вашу проблему, но если вы посмотрите на Rails Guides "особых ресурсов" вы можете увидеть:

Path  Controller  #Action   Used for 
GET  /geocoder/new geocoders#new  return an HTML form for creating the geocoder 
POST  /geocoder  geocoders#create create the new geocoder 
GET  /geocoder  geocoders#show display the one and only geocoder resource 
GET  /geocoder/edit geocoders#edit return an HTML form for editing the geocoder 
PATCH/PUT /geocoder  geocoders#update update the one and only geocoder resource 
DELETE /geocoder  geocoders#destroy delete the geocoder resource 

шоу, создание, обновление и уничтожить использовать один и тот же маршрут, но с различными HTTP-глаголами. И в вашем случае, test написал с глаголом PATCH, потому что этот глагол ранее в таблице пустым именем означает, что он использует то же имя, что и верхняя строка.

+0

Итак, если разрешено использовать одно и то же имя маршрута на маршрутах с разными глаголами, почему я получаю эту ошибку? Нет другого маршрута с именем 'test' с глаголом' GET'. –

+0

Я принимаю этот ответ как правильный, потому что я не знал, что имя пути используется для нескольких глаголов одновременно. Таким образом, мне не нужно называть мой маршрут 'as:: test', потому что он уже назван тестом. –

+0

@ EikeCochu, что вы делаете, когда получаете эту ошибку? Как вы пытаетесь его использовать? – piton4eg

1

Rails использует тот же префикс (например, в вашем случае «test») для всех этих четырех маршрутов [show (GET), update (PUT/PATCH), destroy (DELETE)] и распознает разные маршруты с помощью HTTP-глаголы.

+0

Я вижу. Я думал, что пустое название маршрута означает имя маршрута, а не предыдущее. –

0

Прежде всего,

test PATCH /tests/:id(.:format)  <-- WHY?? 
     DELETE /tests/:id(.:format) 
     GET /tests/*id(.:format) 
  1. патч для обновления маршрутов метод.
  2. Удалить для маршрута метода уничтожения.
  3. что добавить ваш пользовательский маршрут, порожденного get 'test/*id', to: 'test#show', as: :test

Итак, здесь вы можете сделать свой показать маршрут с другим псевдонимом. Например, использовать as :show_test

Смежные вопросы