Routes
Intro
Описаны в /config/route.rb
и скриптах /config/routes/...
.
Про DSL Rails Routes: https://guides.rubyonrails.org/routing.html
Этот механизм перенаправляет url на контроллеры или Rack приложению. Позволяет не хардкодить в куче мест строки.
Если все зависимости у вас локально подтянуты, то можно посмотреть все роуты командой :
Routing to Rack: https://guides.rubyonrails.org/routing.html#routing-to-rack-applications
Routes directives
resources
С помощью этой директивы можно создать эндпоинты для конкретного ресурса. Например:
создаст семь эндпоинтов, обрабатываемых контроллером Photos:
HTTP Verb | Path | Controller#Action | Used for |
---|---|---|---|
GET | /photos | photos#index | display a list of all photos |
GET | /photos/new | photos#new | return an HTML form for creating a new photo |
POST | /photos | photos#create | create a new photo |
GET | /photos/:id | photos#show | display a specific photo |
GET | /photos/:id/edit | photos#edit | return an HTML form for editing a photo |
PATCH/PUT | /photos/:id | photos#update | update a specific photo |
DELETE | /photos/:id | photos#destroy | delete a specific photo |
Так же можно создавать подблок ресурса
Что создаст следующие эндпоинты для комментов
При определении ресурса можно указать доп опции:
Singular Resources
В некоторых случаях нам не надо кучу эндпоинтов для ресурсов.
namespaces
Позволяет организовывать роуты в группы:
scope
Если мы не хотим, чтобы в пути был /admin, но хотим, чтобы существовала логическая группа — используем директиву scope:
If instead you want to route /admin/articles
to ArticlesController
(without the Admin::
module prefix), you can specify the path with a scope
block:
concern
Директива позволяет определять роуты, которые могут быть переиспользованы в других роутах. Позволяет писать меньше кода тем самым
Использовать это можно где угодно (например и в namespaces)
draw
Это применяется для создания макросов. Для тех случаев, когда мы хотим вынести группу маршрутов в отдельный файл, например:
А так он будет подключен в главном route-конфиге:
Или по другому без оборота в routes.draw (как мне кажется это проще)
Last updated