2013-04-08 34 views
11

Trong ứng dụng ray của tôi sau trong routes.rbtại sao không có tên đường dẫn cho các tuyến đường tùy chỉnh trong Rails

resources :users 

dẫn đến sau đầu ra cho 'đường cào'

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 

& sau trong routes.rb (đối với bộ điều khiển tùy chỉnh 'nhà riêng' của tôi)

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] 

dẫn đến đầu ra sau cho 'tuyến đường cào'

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 

tại sao không có tên đường dẫn cho trường hợp thứ hai? như trong trường hợp đầu tiên ('new_user', 'edit_user')

có cách nào để có tên đường dẫn cho trường hợp thứ hai không? vì tôi muốn sử dụng các tên đường dẫn này trong chế độ xem của tôi

Trả lời

32

Không có tên đường dẫn vì bạn chưa chỉ định tên đường dẫn. Nếu bạn đang cung cấp các tuyến đường tùy chỉnh thay vì sử dụng resources, bạn cần phải sử dụng :as để cung cấp một tên đường dẫn:

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

Bạn cũng nên chỉ cần sử dụng get thay vì match... via: :get:

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

Tuy nhiên, do bạn thiết lập các tuyến đường, đặt cược của bạn tốt hơn là tiếp tục sử dụng resources, nhưng để cung cấp danh sách hành động hạn chế qua :only và bộ điều khiển tùy chỉnh qua :controller:

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

Cảm ơn .. đó là nhanh chóng, +1 :), một câu hỏi nữa là có bất kỳ lợi thế nào của việc bỏ 'đối sánh ... qua:: get'? như bạn đã nói ở trên – Akhil

+2

Cách của tôi ngắn hơn và rõ ràng hơn. Câu hỏi hay hơn là: Có lợi thế nào khi sử dụng 'match ... qua:: get' qua' get' không? – meagar

+1

đã nhận nó..i sẽ đi theo cách của bạn – Akhil

Các vấn đề liên quan