scope
у Rails — це метод, що використовується у файлі routes.rb
для групування маршрутів, що дозволяє організовувати їх в логічні блоки. Це особливо корисно, коли у вас є кілька маршрутів, які мають спільні властивості, такі як загальний префікс URL або однакова логіка контролера.
Rails.application.routes.draw do
scope '/admin' do
resources :users
resources :products
end
end
У цьому прикладі всі маршрути для ресурсів users
і products
будуть мати префікс /admin
. Тобто, маршрути будуть виглядати як /admin/users
, /admin/users/:id
, /admin/products
, і так далі. Це допомагає краще організувати маршрути, зокрема, коли у вас є різні секції вашого додатку, наприклад, адміністративна панель.
scope
також дозволяє застосовувати спільні параметри для маршрутизації або використовувати інші налаштування, такі як модифікація контролера або іменування маршрутів.
Або більш складний приклад:
Rails.application.routes.draw do
# Групування маршрутів для API версії 1
scope '/api/v1', module: 'api/v1', defaults: { format: :json } do
resources :users do
member do
get 'profile'
end
collection do
get 'search'
end
end
resources :products do
collection do
get 'featured'
end
end
end
# Групування маршрутів для API версії 2
scope '/api/v2', module: 'api/v2', defaults: { format: :json } do
resources :users do
member do
get 'profile'
put 'update_password'
end
collection do
get 'search'
post 'import'
end
end
resources :products do
collection do
get 'featured'
post 'bulk_update'
end
end
end
# Групування маршрутів для адміністративної панелі
scope '/admin', module: 'admin' do
resources :dashboard, only: [:index] do
collection do
get 'stats'
end
end
resources :users
resources :products
end
end
Пояснення
- API Версія 1 (
/api/v1
)
-
Всі маршрути в цій групі мають префікс
/api/v1
і використовують контролери з модуляApi::V1
. -
Для ресурсу
users
:GET /api/v1/users/:id/profile
для отримання профілю конкретного користувача.GET /api/v1/users/search
для пошуку користувачів.
-
Для ресурсу
products
:GET /api/v1/products/featured
для отримання featured продуктів.
- API Версія 2 (
/api/v2
)
-
Всі маршрути в цій групі мають префікс
/api/v2
і використовують контролери з модуляApi::V2
. -
Для ресурсу
users
:-
GET /api/v2/users/:id/profile
для отримання профілю. -
PUT /api/v2/users/:id/update_password
для оновлення пароля. -
GET /api/v2/users/search
іPOST /api/v2/users/import
для пошуку і імпорту користувачів.
-
-
Для ресурсу
products
:GET /api/v2/products/featured
іPOST /api/v2/products/bulk_update
для featured продуктів і bulk оновлень.
- Адміністративна панель (
/admin
)
-
Всі маршрути в цій групі мають префікс
/admin
і використовують контролери з модуляAdmin
. -
Для ресурсу
dashboard
:-
GET /admin/dashboard
для перегляду адмінської панелі. -
GET /admin/dashboard/stats
для перегляду статистики.
-
-
Для ресурсів
users
іproducts
:- Всі стандартні CRUD маршрути для адміністративних операцій.
Цей приклад демонструє, як можна використовувати scope
для створення чіткої ієрархії маршрутів, групування їх за версіями API або за різними частинами додатку, а також для налаштування форматів запитів та маршрутів.