2016-09-27 3 views
0

Ich habe HTML-Formulare in der Vergangenheit verwendet, um Gerätebenutzer zu aktualisieren, aber jetzt habe ich eine Rails 4-Anwendung mit Gerät zur Authentifizierung und ich würde gerne in der Lage sein, meine zu steuern Benutzer von Remote mit RestClient/CURL. Ich war überrascht, die Benutzerrouten zu betrachten und zu bemerken, dass es keine/users /: id route gibt (kein GET und vor allem kein PUT).Wie aktualisiere ich einen Gerätebenutzer über API-Aufrufe

würde ich einen Befehl wie dies zur Ausgabe der Lage sein mag:

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 

Wenn ich den Benutzer-ID in dem URL-Pfad nicht angeben, dann wird dieser Antrag erfolgreich sein, aber es wird aktualisiert die E-Mail des Administrators - was ich nicht möchte. Wenn es eine andere Möglichkeit gibt, den Benutzer anzugeben, den ich aktualisieren möchte (vorausgesetzt, dass die ID im Datenhash nicht funktioniert), dann wäre das großartig ..., obwohl das RESTful-Routenstandards für Devices brechen würde.

+0

Wie + – Chris

+0

Logik erstellen Sollten Sie nicht hinzufügen „Ressourcen: Benutzer“ in Ihrer Anwendung routes.rb for/users /: ID funktioniert? –

+0

Ich denke, ich muss meine eigenen schreiben, wenn ich keine vorhandenen Lösungen finden kann. Und ich denke, ich könnte "Ressourcen: Benutzer" zu Routen hinzufügen, aber was ist der "Devise" Weg, Dinge zu tun? In diesem Fall werden die Routen zu einem anderen Controller übertragen, oder ich müsste den Controller für Geräteanmeldungen überschreiben. Ich habe den Code überflogen und ich verstehe nicht alles. –

Antwort

1

Werden Sie können Sie Controller besitzen Aktionen im devise bauen

verwenden diese die Controller für die Benutzer

rails generate devise:controllers users 

die Controller in app/controllers/users/

erstellt werden generieren, dann können Sie hinzufügen Ihre eigene Aktion an den Controller

zum Beispiel:

danach müssen Sie Route für die Aktion in der über das Erstellen Ihrer eigenen Controller routes.rb

devise_scope :user do 
    put 'users/:id', to: 'users/sessions#update_info' 
end 
+0

Danke! Ich wusste nichts von dieser Option, also hatte ich meinen eigenen Benutzercontroller erstellt. Obwohl es den Job macht, bevorzuge ich es, den offiziellen Weg zu gehen. –

Verwandte Themen