2013-04-08 53 views
11

在我的Rails应用程序中的routes.rb以下为什么在Rails的自定义路线没有路名

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中下面的下面的输出(用于我的自定义控制器“家”)

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')

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

回答

32

由于没有指定路径名称,所以没有路径名称。如果你提供定制的路线,而不是使用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" 
+2

谢谢..这很快,+1 :),还有一个问题是否有任何优势,滴'匹配...通过::get'?正如你上面所说 – Akhil 2013-04-08 18:27:12

+2

我的方式更短,更清晰。更好的问题是:使用'match ... via'通过以下方法有什么优点::get' over'get'? – meagar 2013-04-08 18:31:00

+1

明白了..我会走你的路 – Akhil 2013-04-08 18:33:20