我有一个资源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]
两个问题:
我是否以正确的方式解决这个问题?
当我在/profile/edit
提交表单时,它会尝试修补/profiles/:id
,这是无效的。好像它应该贴到/profile
。我做错了什么?
答案 0 :(得分:0)
如果您使用像resource :profile, only: [:show, :edit, :update]
这样的单一资源,则假定整个应用程序中只有一个资源。
如果你真的认为用户必须拥有这些路线,只需将它们映射到它们所属的路线即可。
resources :profiles, only: [:show, :edit, :update]
get '/profile', to: 'profiles#show'
...