在我的rails应用程序中,遵循routes.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”)

有没有办法为第二种情况提供路径名?因为我想在视图中使用这些路径名

最佳答案

没有路径名,因为尚未指定路径名。如果要提供自定义路由而不是使用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"

10-06 10:09