В чем разница между маршрутами :new, :collection и :member?

Я прочитал документацию, но до сих пор не уверен, что понять все.

Особенно почему есть параметр :new. Насколько я понимаю, его можно было заменить параметром :collection.

Так в чем разница между этими тремя типами маршрутов?


person Daniel Rikowski    schedule 03.11.2009    source источник


Ответы (3)


Разница заключается в сгенерированном URL.
Давайте предположим три ресурса:

map.resources :users, :collection => { :rss => :get }
map.resources :users, :member => { :profile => :get }
map.resources :users, :new => { :draft => :get }

Первый маршрут создаст:

/users/rss

Между именем контроллера и именем действия ничего нет. Нам не нужен какой-либо другой параметр, чтобы получить rss-канал списка пользователей.

Второй создаст действие «профиль» как член объекта. Итак, у нас будет:

/users/1/profile

«1» — это to_param пользователя. Нам нужен идентификатор пользователя для отображения профиля.

Третий создаст действие «черновик» как член нового действия. Итак, у нас будет:

/users/new/draft

Действие «черновик» отображает черновик пользователя, прежде чем принять его создание.

Вот в чем разница между :collection, :member и :new. Каждый из них создает разные маршруты, каждый со своей целью.

person Damien MATHIEU    schedule 03.11.2009
comment
Я понимаю, что это старый пост. У меня были некоторые проблемы с маршрутами действий между контроллерами, использующими ресурс member. Мне удалось решить мою проблему, но я все еще не уверен, почему member вызывал конфликт. Я попытался найти это и не смог найти информацию, которую искал. Я верю, вы бы знали. Возможно, если у вас есть минутка, вы можете зайти на мой пост и поделиться некоторой мудростью. Спасибо! stackoverflow.com/questions/21296591/ - person Cache; 23.01.2014
comment
что делает map.resources? - person BKSpurgeon; 01.09.2016

:member создает путь с шаблоном /:controller/:id/:your_method

:collection создает путь с шаблоном /:controller/:your_method

:new создает путь с шаблоном /:controller/:your_method/new (обратите внимание, что последний элемент пути, то есть new, является константой)

New отличается от Collection в основном идеологическим пластом. Вот как гуру REST видят создание «субресурса» REST в более крупном ресурсе.

person Henryk Konsek    schedule 03.11.2009
comment
Как мне получить путь с шаблоном /:controller/:your_method/:id? - person Dennis; 24.09.2014

Объяснение Дэмиена в основном правильное, за исключением раздела о :new

Внимательно прочитайте руководство по маршрутизации ruby ​​on rails по адресу http://guides.rubyonrails.org/routing.html Объясняет маршрутизацию изнутри наружу, а затем обратно. Раздел 3.11.3 (Добавление новых маршрутов) описывает, что делает :new, и это сильно отличается от :member и :collection.

По сути, map.resources :photos, :new => { :upload => :post } создаст /photos/upload с помощью HTTP-глагола POST.

person Josh K    schedule 03.11.2009