2013-04-08 11 views
11

W mojej aplikacji po szynach w routes.rbdlaczego nie ma nazwy ścieżki dla niestandardowych tras w Rails

resources :users 

prowadzi do następujących wyjścia dla następujących „trasy natarcia”

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 

& w routes.rb (dla mojego kontrolera niestandardowego "dom")

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] 

prowadzi do następujących wyników dla "tras rake"

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 

dlaczego nie ma ścieżek dla drugiego przypadku? jak w pierwszym przypadku ("nowy_użytkownik", "edytujący_użytkownik")

czy istnieje sposób na podanie nazw ścieżek dla drugiego przypadku? ponieważ chcę używać tych nazw ścieżek w moich widokach

Odpowiedz

32

Brak nazw ścieżek, ponieważ nie podano nazw ścieżek. Jeśli dostarczaniu niestandardowych tras zamiast korzystania resources, trzeba użyć :as aby zapewnić ścieżkę:

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

Należy również wystarczy użyć get zamiast match... via: :get:

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

Biorąc jednak pod uwagę swojej zestaw tras, lepiej jest kontynuować korzystanie z resources, ale dostarczyć ograniczoną listę działań za pośrednictwem :only i niestandardowego kontrolera przez :controller:

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

Dzięki .. to było szybkie, +1 :), jeszcze jedno pytanie czy jest jakaś zaleta zrzucania "meczu ... przez:: get"? jak powiedziałeś powyżej – Akhil

+2

Moja droga jest krótsza i jaśniejsza. Lepsze pytanie brzmi: czy jest jakaś korzyść z używania 'match ... via:: get' over' get'? – meagar

+1

rozumiem ... pójdzie po twojej myśli – Akhil

Powiązane problemy