ruby-on-rails devise rspec - Sovrascrive controller di registrazioni di dispositivi





3 Answers

Un modo migliore e più organizzato per sovrascrivere i controller e le viste di Devise usando gli spazi dei nomi:

Crea le seguenti cartelle:

app/controllers/my_devise
app/views/my_devise

Mettere tutti i controller che si desidera sovrascrivere in app / controller / my_devise e aggiungere MyDevise spazio MyDevise nomi MyDevise ai nomi delle classi del controller. Esempio di Registrations :

# app/controllers/my_devise/registrations_controller.rb
class MyDevise::RegistrationsController < Devise::RegistrationsController

  ...

  def create
    # add custom create logic here
  end

  ...    

end 

Cambia i tuoi percorsi di conseguenza:

devise_for :users,
           :controllers  => {
             :registrations => 'my_devise/registrations',
             # ...
           }

Copiare tutte le viste richieste in app/views/my_devise dalla cartella app/views/my_devise gem o utilizzare rails generate devise:views , eliminare le viste non sovrascritte e rinominare la cartella devise su my_devise .

In questo modo avrai tutto ben organizzato in due cartelle.

tutorial session_controller traduzione

Ho aggiunto un campo al modulo di iscrizione basato su un modello diverso, vedi Come uso gli attributi annidati con il modello di sviluppo per i dettagli cruenti. Questa parte sta funzionando bene.

Il problema ora è quando Activerecord::UnknownAttributeError , è fallito nell'azione di creazione del controller delle registrazioni che viene fornito da escogitare con un Activerecord::UnknownAttributeError su questo campo (società).

Suppongo di dover sovrascrivere il controller delle registrazioni, oppure c'è un modo migliore / più semplice per avvicinarmi a questo?




È possibile generare viste e controllori per la personalizzazione del dispositivo.

Uso

rails g devise:controllers users -c=registrations

e

rails g devise:views 

Copierà controller e viste particolari dalla gemma alla tua applicazione.

Quindi, dire al router di utilizzare questo controller:

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



È inoltre possibile creare la cartella nel percorso dei controller e copiare / incollare l'intero controller di elaborazione in esso. Ciò non richiede alcuna configurazione aggiuntiva.

Quindi, per il controller delle registrazioni, sarebbe app/controllers/devise/registrations_controller.rb e quindi copiare il file devise registrations_controller.rb in esso. Puoi scaricarlo da github https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb , oppure puoi rintracciarlo nella tua fonte gemma, o se usi RubyMine quando digita nella classe di class Devise::RegistrationsController un simbolo simile a un globo appare a sinistra ... fai clic su di esso per aprire il file Devise Registration Controller. Quindi copia / incolla.




Related