在我的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"