2016-09-27 69 views
0

我過去使用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

我想如果我找不到任何現有的解決方案,我需要自己寫。而且,我想我可以將「資源:用戶」添加到路線中,但是什麼是「設計」方式?在這種情況下,路由將轉到另一個控制器,否則我將不得不重寫設計註冊控制器。我瀏覽了代碼,我不明白所有的東西。 –

回答

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

謝謝!我不知道這個選項,所以我創建了我自己的用戶控制器。即使它做了這項工作,我更喜歡以官方的方式來做。 –