Подтвердить что ты не робот

Какая разница между: новыми,: collection и: member route?

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

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

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

4b9b3361

Ответ 1

Разница в 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. Каждый из них создает разные маршруты, каждый из которых имеет свою цель.

Ответ 2

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

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

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

new отличается от Collection главным образом на идеологическом слое. То, как гуру REST видят создание "подресурса" REST в рамках большего ресурса.

Ответ 3

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

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

В основном map.resources: photos,: new = > {: upload = > : post} будет создавать/фотографировать/выгружать, используя HTTP-протокол POST.