Я прочитал документацию, но до сих пор не уверен, что понять все.
Особенно почему есть параметр :new
. Насколько я понимаю, его можно было заменить параметром :collection
.
Так в чем разница между этими тремя типами маршрутов?
Я прочитал документацию, но до сих пор не уверен, что понять все.
Особенно почему есть параметр :new
. Насколько я понимаю, его можно было заменить параметром :collection
.
Так в чем разница между этими тремя типами маршрутов?
Разница заключается в сгенерированном 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. Каждый из них создает разные маршруты, каждый со своей целью.
member
. Мне удалось решить мою проблему, но я все еще не уверен, почему member
вызывал конфликт. Я попытался найти это и не смог найти информацию, которую искал. Я верю, вы бы знали. Возможно, если у вас есть минутка, вы можете зайти на мой пост и поделиться некоторой мудростью. Спасибо! stackoverflow.com/questions/21296591/
- person Cache; 23.01.2014
:member
создает путь с шаблоном /:controller/:id/:your_method
:collection
создает путь с шаблоном /:controller/:your_method
:new
создает путь с шаблоном /:controller/:your_method/new
(обратите внимание, что последний элемент пути, то есть new
, является константой)
New
отличается от Collection
в основном идеологическим пластом. Вот как гуру REST видят создание «субресурса» REST в более крупном ресурсе.
/: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.