2014-04-05 14 views
17

Sono un principiante di Rails. Sto lavorando a un piccolo progetto Rails4 che cerca di migliorare le mie capacità. Sto seguendo vagamente lo M.Hartl's tutorial.Ho bisogno di un controller "Utenti" quando utilizzo Devise in Rails

Come per il tutorial, viene creata un'autenticazione utente personalizzata. Tuttavia mi piacerebbe usare Devise per l'autenticazione dell'utente. Devo ancora avere un controller Users come nell'esercitazione? In quali casi dovrei usare/non usare un controller Users quando già utilizzo Devise?

Per quanto riguarda il tutorial, saltare la parte di generazione del controller o devo mappare le azioni su Devise?

+0

Se si desidera eseguire alcune personalizzazioni, è necessario creare il "controllore utenti". Perché è all'altezza delle tue esigenze? Per prima cosa dovresti sapere perché creiamo un nuovo controller? –

+0

http://stackoverflow.com/questions/21904701/ruby-on-rails-4-what-authentication-gem-to-use/21907080#21907080 –

+1

Mi sono imbattuto in questa mia vecchia domanda e ho pensato di collegarmi a un post sul blog che mi ha aiutato a capire meglio alcune cose. Qui http://www.korenlc.com/rails-tutorial-authentication-with-devise/ – imarg

risposta

38

È necessario un controller utente solo se si desidera gestire gli utenti separatamente dal normale processo di registrazione/aggiornamento. Ho un controller per gli utenti in modo che gli amministratori possano gestire (creare, modificare, aggiornare, eliminare) gli utenti indipendentemente dal normale processo di registrazione/aggiornamento.

Il conflitto con l'escogitazione è probabilmente dovuto al fatto che nel file di rotte si dispone di devise_for :users … per configurare il dispositivo e che è disponibile anche il resources :users per il proprio UsersController. Ciò significa che Idea e il tuo UsersController tenteranno di condividere alcuni degli stessi percorsi /users. È necessario separarli modificando il percorso a cui viene mappato uno di essi. È possibile aggiungere, ad esempio, :path => 'u' all'istruzione devise_for in modo che le route di devise siano mappate su /u e non siano in conflitto con il proprio UsersController su /users. In alternativa, è possibile lasciare da solo il devise_for (quindi utilizzando ancora /users) e modificare il routing di UsersController, ad esempio, resources :users_admin, :controller => 'users' che sposta i percorsi di UsersControllers da mappare a /users_admin. Si noti che questo cambierebbe gli helper del percorso, ad esempio da users_path a users_admin_path.

UPDATE

In seguito alla vostra commento/modifica, ho avuto un rapido sguardo al tutorial e penso che concepire fondamentalmente si dà la funzionalità equivalente delle funzionalità relative all'utente che è stato sviluppato dalla sezione 5.4 a circa le sezioni 9.1 o 9.2. (più alcune cose extra, ad esempio, conferma e-mail, reimpostazione della password, blocco dell'account, ecc.). Tuttavia, ciò non significa che si tratti di una sostituzione drop-in per quella funzionalità, se si desidera provare a unire Devise con quel tutorial. Ci sono alcune cose che sembrano funzionare (ad es. Devise definisce anche un metodo current_user), ma le rotte, ecc. Sarebbero diverse, e escogitare suddividono le cose in più controller (controllori separati per la registrazione, accesso/uscita, reimpostazione della password ...). La funzionalità di tipo admin (come nelle sezioni 2.2, 9.3, 9.4 - crea/modifica/cancella/elenca gli utenti altri) è quello che ho aggiunto un UserController separato nella mia app. Devise non definisce un UsersController, ma usa gli instradamenti users se si esegue devise_for :users senza un percorso come detto sopra.

Quindi, più precisamente:

  1. si avrebbe solo bisogno di un UsersController se si desidera attivare la funzionalità admin-tipo che permette la visualizzazione/modifica/eliminazione di tutti gli utenti.
  2. Se si desidera utilizzare devise nel tutorial, sarà probabilmente necessario un po 'di lavoro per massaggiare le cose per adattarsi, cambiare i link di aiuto sulle pagine ecc. Scusa se non sono più specifico; Non ho fatto questo tutorial.

Si perderebbe l'ulteriore comprensione che deriva dal fare tutto manualmente da soli, ma ideare è un motore popolare, quindi è bene sapere anche. Se hai tempo, puoi fare il tutorial interamente, e poi di nuovo con idea! Ti aiuterebbe a capire che parte del genere di cose che escogitano sta facendo dietro le quinte. P.S: Può essere istruttivo guardare il codice sorgente del dispositivo, anche se non lo capisci immediatamente.

+0

Grazie per la risposta. Mi ha aiutato a capire alcune cose, ma non mi aiuta molto (non per colpa tua). Ora capisco che la mia domanda era molto vaga e non stavo dando un contesto sufficiente a riguardo, quindi l'ho modificato. Forse darai un'altra occhiata? – imarg

+0

grazie @Tim - quindi voglio solo cambiare i parametri nel controller di sviluppo - qualsiasi idea su come realizzare effettivamente il controller di sviluppo senza reinventare la ruota? – BKSpurgeon