2015-12-29 5 views
11

Modello utente generato che utilizza la gemma Devise.Impossibile aggiungere campi personalizzati a Devise model in Ruby on Rails. Errore metodo privato

Cercando di aggiungere l'attributo 'nome utente'.

Seguito documentazione ufficiale, ora il mio ApplicationController assomiglia a questo:

class ApplicationController < ActionController::Base 

    protect_from_forgery with: :exception 
    before_action :configure_permitted_parameters, if: :devise_controller? 
    before_action :authenticate_user! 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:account_update, keys: [:username]) 
    devise_parameter_sanitizer.permit(:sign_in, keys: [:username]) 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username]) 
    end 

end 

Quando cerco di andare a rendere conto pagina di aggiornamento ottengo l'errore seguente:

NoMethodError in Devise::RegistrationsController#edit 

private method `permit' called for #Devise::ParameterSanitizer:0x007f13396cf180> 

ciò che può essere di sbagliato qui?

risposta

18

Secondo this answer, è anche possibile effettuare le seguenti operazioni:

def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_in)  << :username 
    devise_parameter_sanitizer.for(:sign_up)  << :username 
    devise_parameter_sanitizer.for(:account_update) << :username 
end 
+2

Perché la risposta @Saiqul Haq non ha funzionato, mentre questo ha fatto. Come sto vedendo che entrambi hanno lo stesso output logico (facendo l'ipotesi solo guardando i codici – ImranNaqvi

18

Sotto risposta potrebbe essere superate per voi, quindi per favore read the source code instead HERE


La prima cosa che si dovrebbe Aware è la disposizione testamentaria versione in modo da controllare la versione installata sul proprio rotaie app comando do seguente:

cat Gemfile.lock | grep devise 

lo dimostra che concepire la versione che ha installato sul vostro rotaie app, è come:

devise (= 3.1.0) 

Se la versione del vostro disposizione testamentaria è> = 4.0.0.rc1

def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up) do |user_params| 
    user_params.permit({ roles: [] }, :email, :password, :password_confirmation) 
    end 
end 

per la versione < 4.0.0.rc1

def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_in)  << :username 
    devise_parameter_sanitizer.for(:sign_up)  << :username 
    devise_parameter_sanitizer.for(:account_update) << :username 
end 
+0

Non sono sicuro di come '{ruoli: []}' sia utilizzato in questa risposta .... Questo è solo un esempio su GitHub come readme.md se le caselle di controllo sono utilizzate poiché non sono parametri validi ... – Mark