我的用户模型具有通常的id主键,但它也具有唯一的login可用作标识符。因此,我想定义路由,以便可以通过ID或登录访问用户。理想的路线是这样的:

/users/:id (GET) => show (:id)
/users/:id (PUT) => update (:id)
...

/users/login/:login (GET) => show (:login)
/users/login/:login (PUT) => update (:login)
...


做到这一点(或类似方法)的最佳方法是什么?

最佳答案

到目前为止,我能想到的最好的方法是:

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。

它可以完成工作,但我希望有更好的方法。

09-25 18:27
查看更多