我使用devise(2.2.3)开发了基本的rails 3.2 app进行身份验证。现在我需要添加对用户帐户/配置文件设置的支持。最终用户可以更新的(个人资料/帐户)附加属性是用户模型的一部分。
我需要建议如何支持这个? UsersController的哪个动作符合要求?我在UsersController中添加了一个编辑操作。当我运行'rake routes'时,我得到以下
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format)设计/注册#uncod user_registration POST /users(.:format)设计/注册#create new_user_registration GET /users/sign_up(.:format)设计/注册#new edit_user_registration GET /users/edit(.:format)设计/注册#edit PUT /users(.:format)设计/注册#update 删除/users(.:format)设计/注册#dutroy edit_user GET /users/:id/edit(.:format)用户#edit 用户获取/users/:id(.:format)用户#show root / home #index
当提交编辑表单时,表单使用PUT向“/ users / 1 / edit”发送消息,我收到路由错误 没有路线匹配[PUT]“/ users / 1 / edit”
这是修改用户设置的正确方法吗?表格是否应以“PUT”发布?如果是这样,如何使用PUT而不是GET进行路由输入?
提前致谢。
答案 0 :(得分:0)
如果您希望用户能够更新“他们的”User
对象,那么您需要在routes.rb
中为他们设置路由条目。类似的东西:
resource :users => [:edit, :update]
您的表单应该是/users/:id
而不是/users/:id/edit
。
设置完成后,您将能够使用表单助手创建表单,供用户编辑User
个对象。您需要在此处考虑安全性,并确保它们不会更新他们无法访问的字段。
执行PUT请求的Rails是正确的,因为rails的主要租户之一是尝试使所有RESTful。
答案 1 :(得分:0)
edit_user GET /users/:id/edit(.:format) users#edit
这很好,因为转到users /:id / edit只是获取表单。然后填写表单,按“提交”的操作将向/ users /:id发出 PUT 请求。你只是错过了第二部分。
杰里米的答案应该解决路线问题。