我过去曾使用HTML表单来更新设计用户,但现在我有一个Rails 4应用程序,用于身份验证,我希望能够使用RestClient / CURL从远程控制我的用户。我很惊讶地看到设计用户路线,并注意到没有/ users /:id路由(没有GET,特别是没有PUT)。
我希望能够发出如下命令:
curl -H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-X PUT http://localhost:3000/users/18232 \
-d '{ "user": { "email": "updated_email@gmail.com", "currrent_password": "password" }}' \
-u admin@gmail.com:password
如果我没有在URL路径中提供用户ID,那么此请求将成功,但它将更新管理员的电子邮件 - 这不是我想要的。如果有一种不同的方式指定我需要更新的用户(提供数据哈希中的id将不起作用),那么这将是很好的...即使这会破坏设计的RESTful路由标准。
答案 0 :(得分:1)
您可以在设计控制器中构建自己的操作
使用它为用户生成控制器
rails generate devise:controllers users
控制器将在app/controllers/users/
然后您可以将自己的操作添加到控制器
例如:
def update_info
@user = User.find(params[:id])
if @user.update(user_params)
puts 'the user info successfully updated' #add whatever you want
else
puts 'failed'
end
end
之后,您需要在routes.rb
devise_scope :user do
put 'users/:id', to: 'users/sessions#update_info'
end