2013-06-14 23 views
6

Ho un modello Accounts con Devise. Devise utilizza alcuni attributi (come email, password ecc.) Ma ho alcuni altri attributi che ho creato. Al momento dell'iscrizione, mi piacerebbe impostarli in un modo.Extending Devise Registration Controller

Come è possibile estendere il controller di registrazione? Capisco che ho bisogno di creare effettivamente un nuovo controller come questo:

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

Posso solo aggiungere il mio codice subito dopo super? Penso che sarebbe troppo tardi perché la risorsa sarebbe già stata salvata. Qual'è il miglior modo per farlo?

Se dovessi scrivere creare da zero, come faccio a sapere che non mi sono perso nulla che Devise fa?

Grazie,

risposta

2

Se si desidera riscrivere il controller da zero per il controllo completo, iniziare con la registration_controller.rb Source Code e apportare le modifiche necessarie.

Raccontare elaborare per utilizzare il controller personalizzato è semplice come cambiare il percorso:

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

È il modo migliore per estenderlo? Sono solo due attributi che devo aggiungere. Inoltre, come si dice a Devise che ho un nuovo controller (in modo che non usi quello della gemma)? – darksky

+0

@Darksky Migliore? Non sono esattamente sicuro. Potresti fare un tentativo e vedere come si sente 'sporco'.Ho aggiornato la mia risposta con una spiegazione su come inventare il nuovo controller. – Josh

+0

cosa succede se voglio solo scavalcare senza ricreare tutto - come si può farlo? – BKSpurgeon

0

Se volete i campi per gli utilizzatori informazioni fornite non c'è necessità di estendere controller.
Se si desidera aggiungerli automaticamente, non c'è motivo non per farlo nel modello! (A meno che non dipende dalla sessione o di richiesta)

Nel primo caso, vedere https://github.com/plataformatec/devise#configuring-views

si dovrebbe cambiare regolatore ideare SOLO se si ha intenzione di modificare il flusso di iscrizione.

+0

Ma fare 'before_save' e chiamare un metodo che imposta alcuni valori nelle interruzioni di modello idea e firma non funziona correttamente. – darksky

+0

Che errore ottieni? –

+0

Non mi consente di accedere e registrarmi reindirizzato alla pagina principale (senza autenticazione utente e pass). Alla fine ho impostato i valori predefiniti nel database. – darksky

9

Secondo lo Devise documentation, sì, proprio come la risposta di Josh, si cambierebbe il controller. Anche se non è necessario iniziare completamente da zero. Dai un'occhiata alla documentazione.

È possibile generare il controller in modo che siano in grado di aggiungere personalizzazioni:

Example: rails generate devise:controllers [scope] 

Quindi, è possibile eseguire il seguente per gli utenti ambito:

rails generate devise:controllers users 

Questo vi dà i controller in un cartella situata qui: app/controller/utenti

Quindi, indica il file di percorsi a usa quel controller Aggiorna il tuo itinerario escogitare per assomigliare a questo:

devise_for :users, controllers: { sessions: "users/sessions" } 

E, infine, copiare tutti i punti di vista. Se non hai ancora generato le visualizzazioni, dovrai farlo. Il controller è cambiato, quindi anche le tue visualizzazioni dovranno esserlo.