Пока лучшее, что я мог придумать, это:
map.resources :users
map.resources :users_by_login,
:controller => "User",
:only => [:show, :edit, :update, :destroy],
:requirements => {:by_login => true}
Обычные маршруты RESTful создаются для пользователей, и, кроме того, ресурс users_by_login
добавляет следующие маршруты (и только те):
GET /users_by_login/:id/edit
GET /users_by_login/:id/edit.:format
GET /users_by_login/:id
GET /users_by_login/:id.:format
PUT /users_by_login/:id
PUT /users_by_login/:id.:format
DELETE /users_by_login/:id
DELETE /users_by_login/:id.:format
Эти маршруты фактически также отображаются на UserController
(только для методов show
/ edit
/ update
/ destroy
). Добавлен дополнительный параметр by_login
(равен true
): таким образом, методы UserController
могут определить, представляет ли параметр id
логин или идентификатор.
Это делает работу, но я бы хотел, чтобы был лучший способ.