Почему нет путей для настраиваемых маршрутов в 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')
Есть ли способ иметь имена путей для второго случая? поскольку я хочу использовать эти имена путей в своих представлениях
Ответы
Ответ 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"