2013-06-14 15 views
6

Ich habe ein Accounts Modell mit Devise eingerichtet. Devise verwendet ein paar Attribute (wie E-Mail, Passwort usw.), aber ich habe ein paar andere Attribute, die ich gemacht habe. Bei der Anmeldung möchte ich sie auf eine Art einrichten.Extending Devise Registration Controller

Wie kann ich den Registrierungs-Controller erweitern? Ich verstehe, dass ich tatsächlich benötigen, um einen neuen Controller wie folgt zu erstellen:

class AccountsController < Devise::RegistrationController 
    def create 
    super 
    end 
end 

Kann es nur direkt nach meinem Code hinzufügen super? Ich denke, es wäre zu spät, da die Ressource bereits gespeichert worden wäre. Was ist der beste Weg, dies zu tun?

Wenn ich von Grund auf neu schreiben würde, woher sollte ich wissen, dass ich nichts vermisse, was Devise macht?

Danke,

Antwort

2

Wenn Sie den Controller von Grund auf für die volle Kontrolle zu überschreiben wollen, beginnen Sie mit der registration_controller.rb Source Code und Änderungen als notwendig machen.

ersinnen Telling Ihre benutzerdefinierten Controller zu verwenden ist so einfach, wie die Änderung der Route:

devise_for :users, :controllers => { :registrations => "users/custom_controller" } 
+0

Ist das der beste Weg, um es zu erweitern? Es sind nur zwei Attribute, die ich hinzufügen muss. Wie sagst du Devise, dass ich einen neuen Controller habe (damit er nicht den im Juwel benutzt)? – darksky

+0

@Darksky Am besten? Ich bin mir nicht ganz sicher. Du könntest es versuchen und sehen, wie "schmutzig" es sich anfühlt.Ich habe meine Antwort mit einer Erklärung aktualisiert, in der ich erklärt habe, wie es um Ihren neuen Controller geht. – Josh

+0

was, wenn ich nur überschreiben möchte, ohne alles neu zu erstellen - wie kann man das tun? – BKSpurgeon

0

Wenn Sie auf die Felder für bereitgestellten Informationen Benutzer möchten gibt es keine Notwendigkeit, Controller zu erweitern.
Wenn Sie diese automatisch hinzufügen möchten, gibt es keinen Grund nicht es im Modell zu tun! (Es sei denn, es auf Sitzung oder Anfrage abhängt)

Im ersten Fall sehen https://github.com/plataformatec/devise#configuring-views

Sie ersinnen Controller nur dann ändern sollten, wenn Sie beabsichtigen, die Registrierung Fluss zu ändern.

+0

Wenn Sie 'before_save' ausführen und eine Methode aufrufen, die einige Werte in den Modell-Breaks einrichtet, funktioniert devise and sign up nicht richtig. – darksky

+0

Welchen Fehler bekommen Sie? –

+0

Es würde mich nicht einloggen und anmelden umgeleitet auf die Hauptseite (ohne authentifizieren Benutzer & Pass). Ich stellte stattdessen die Standardwerte in der Datenbank ein. – darksky

9

Nach der Devise documentation, ja, genau wie Joshs Antwort, würden Sie den Controller ändern. Allerdings müssen Sie nicht komplett von vorne anfangen. Schauen Sie sich die Dokumentation an.

können Sie den Controller erzeugen, so Sie in der Lage sind Anpassungen hinzuzufügen:

Example: rails generate devise:controllers [scope] 

So könnten Sie die folgenden für Ihre Benutzer Umfang ausführen:

rails generate devise:controllers users 

Diese Sie die Controller in einem gibt Ordner hier: App/Controller/Benutzer

Dann sagen Sie Ihre Routen Datei zu Verwende diesen Controller. Aktualisieren Sie Ihre Geräte-Route so, dass sie wie folgt aussieht:

Und schließlich kopieren Sie alle Ansichten. Wenn Sie die Ansichten noch nicht erstellt haben, müssen Sie dies tun. Der Controller hat sich geändert, also müssen auch Ihre Ansichten geändert werden.

Verwandte Themen