2013-04-08 3 views
11

В моих рельсах приложении следующий в 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

+2

Мой путь короче и яснее. Лучший вопрос: есть ли преимущество в использовании 'match ... via:: get' over' get'? – meagar

+1

получил это .. я поеду – Akhil