Routes

Intro

Описаны в /config/route.rb и скриптах /config/routes/... .

Про DSL Rails Routes: https://guides.rubyonrails.org/routing.htmlarrow-up-right

Этот механизм перенаправляет url на контроллеры или Rack приложению. Позволяет не хардкодить в куче мест строки.

Если все зависимости у вас локально подтянуты, то можно посмотреть все роуты командой :

./bin/rails routes

Routing to Rack: https://guides.rubyonrails.org/routing.html#routing-to-rack-applicationsarrow-up-right

Routes directives

resources

С помощью этой директивы можно создать эндпоинты для конкретного ресурса. Например:

Rails.application.routes.draw do
    resources :photos
end

создаст семь эндпоинтов, обрабатываемых контроллером 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