[Ruby-On-Rails] Sovrascrive controller di registrazioni di dispositivi



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.

Question

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.




Links