到目前为止,我能想到的最好的是:
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参数是代表登录名还是 id。
它可以完成工作,但我希望有更好的方法。