如何通过API调用更新设计用户

问题描述:

我过去使用HTML表单来更新设计用户,但是现在我有一个Rails 4应用程序和身份验证设备,我希望能够控制我的远程使用RestClient/CURL的用户。我很惊讶地看到设计用户路由,并注意到没有/ users /:id路由(没有GET,特别是没有PUT)。如何通过API调用更新设计用户

我想能够发出一个命令,如本:

curl -H 'Content-Type: application/json' \ 
-H 'Accept: application/json' \ 
-X PUT http://localhost:3000/users/18232 \ 
-d '{ "user": { "email": "[email protected]", "currrent_password": "password" }}' \ 
-u [email protected]:password 

如果我不提供URL路径的用户ID,那么这个请求会成功,但它会更新管理员的电子邮件 - 这不是我想要的。如果有不同的方式来指定我需要更新的用户(提供数据散列中的id不起作用),那么这将很棒......即使这会破坏RESTful路由标准的设计。

+0

行动创造如何创建自己的控制器+逻辑 – Chris

+0

你不应该添加路线:在你的应用程序的routes.rb“用户资源” for/users /:id工作? –

+0

我想如果我找不到任何现有的解决方案,我需要自己写。而且,我想我可以将“资源:用户”添加到路线中,但是什么是“设计”方式?在这种情况下,路由将转到另一个控制器,否则我将不得不重写设计注册控制器。我浏览了代码,我不明白所有的东西。 –

请问你可以建立你自己的色器件控制器

使用这个动作来生成

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 
+0

谢谢!我不知道这个选项,所以我创建了我自己的用户控制器。即使它做了这项工作,我更喜欢以官方的方式来做。 –