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

StackOverflow https://stackoverflow.com/questions/1667146

  •  13-09-2019
  •  | 
  •  

Вопрос

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

Особенно почему есть :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 внутри более крупного ресурса.

Объяснение Дэмьена в основном верно, за исключением раздела о :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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top