用于单例资源的Rails路由/ auth

时间:2013-12-20 18:09:07

标签: ruby-on-rails routing

我有一个资源profile我希望用户能够以各种方式访问​​。我希望登录用户能够从这些路径访问他们自己的个人资料:

GET /profile
GET /profile/edit
PATCH /profile
PUT /profile

我希望通过这条路线可以查看个人资料:

GET /profiles/:id

无法创建或删除配置文件,用户无法编辑其他用户的配置文件。我也不希望向用户公开个人资料索引,因此这些路由都不可用:

GET /profile/new
POST /profile
DELETE /profile
GET /profiles
GET /profiles/:id/edit
PATCH /profiles/:id
PUT /profiles:id
DELETE /profiles/:id
GET /profiles/new
POST /profiles

我正在使用此路线映射:

resources :profiles, only: [:show]
resource :profile, only: [:show, :edit, :update]

两个问题:

  1. 我是否以正确的方式解决这个问题?

  2. 当我在/profile/edit提交表单时,它会尝试修补/profiles/:id,这是无效的。好像它应该贴到/profile。我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果您使用像resource :profile, only: [:show, :edit, :update]这样的单一资源,则假定整个应用程序中只有一个资源。

如果你真的认为用户必须拥有这些路线,只需将它们映射到它们所属的路线即可。

resources :profiles, only: [:show, :edit, :update]
get '/profile', to: 'profiles#show'
...