Я прочитал документацию , но я все еще не уверен, что все понимаю.
Тем более, почему есть параметр :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
создает путь с шаблоном /:controller/:id/:your_method
:collection
создает путь с шаблоном /:controller/:your_method
:new
создает путь с шаблоном /:controller/:your_method/new
(обратите внимание, что последний элемент пути, т.е. new
, является постоянным)
new
отличается от Collection
главным образом на идеологическом слое. То, как гуру REST видят создание "подресурса" REST в рамках большего ресурса.
Объяснение Damiins в основном правы, за исключением раздела о: new
У вас действительно хорошее чтение рубинового маршрута по направляющей маршрутизации на http://guides.rubyonrails.org/routing.html В нем объясняется маршрутизация изнутри, а затем обратно еще раз. Раздел 3.11.3 (Добавление новых маршрутов) описывает, что: new делает, и это очень отличается от: member and: collection.
В основном map.resources: photos,: new = > {: upload = > : post} будет создавать/фотографировать/выгружать, используя HTTP-протокол POST.