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

Почему нет путей для настраиваемых маршрутов в Rails

В моем приложении rails, следующем в route.rb

resources :users

приводит к следующему выходу для "маршрутов рейка"

 users        GET    /users(.:format)                 users#index
              POST   /users(.:format)                 users#create
 new_user     GET    /users/new(.:format)             users#new
 edit_user    GET    /users/:id/edit(.:format)        users#edit
 user         GET    /users/:id(.:format)             users#show
              PUT    /users/:id(.:format)             users#update
              DELETE /users/:id(.:format)             users#destroy

& следующий в routes.rb(для моего пользовательского контроллера "home" )

match  '/new_user'        =>          'home#new_user', via: [:get]
match  '/users/:id/edit'  =>          'home#edit_user', via: [:get]
match  '/users/:id'       =>          'home#show_user', via: [:get]
match  '/users/:id'       =>          'home#create_user', via: [:post]

приводит к следующему выходу для "маршрутов рейка"

GET    /new_user(.:format)                home#new_user
GET    /users/:id/edit(.:format)          home#edit_user
GET    /users/:id(.:format)               home#show_user
POST   /users/:id(.:format)               home#create_user

почему нет имен путей для второго случая? как в первом случае ('new_user', 'edit_user')

Есть ли способ иметь имена путей для второго случая? поскольку я хочу использовать эти имена путей в своих представлениях

4b9b3361

Ответ 1

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

match '/new_user' => 'home#new_user', via: :get, as: :new_user

Вы также должны использовать get вместо match... via: :get:

get '/new_user' => 'home#new_user', as: :new_user

Однако, учитывая ваш набор маршрутов, ваша лучшая ставка заключается в продолжении использования resources, но для предоставления ограниченного списка действий с помощью :only и пользовательского контроллера с помощью :controller:

resources :users, only: %w(new edit show create), controller: "home"