2013-08-17 6 views
6

Uso Rails 4.0.0 e Devise 3.0.2 e sto provando a configurare Devise con Strong Parameters dopo this instruction all'interno del README Devise.Personalizzazione dell'elaborazione con parametri forti

ho scritto il codice come questo nel application_controller.rb

class ApplicationController < ActionController::Base 
    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) << :nick 
    end 
end 

Poi ho visitato http://localhost:3000/users/sign_up. Ho ottenuto un NoMethodError in Devise::RegistrationsController#new, che dice:

metodo non definito <<' for {}:ActionController::Parameters

e punti alla linea esatto in cui ho scritto devise_parameter_sanitizer.for(:sign_up) << :nick

C'è qualcosa che ho fatto di sbagliato? Grazie per l'aiuto.

+0

ho provato esattamente lo stesso codice e ottengo lo stesso errore. 'devise_parameter_sanitizer.for (: sign_up)' restituisce un hash vuoto, quindi su questo non è possibile chiamare il metodo '<<' Ho inviato [un problema] [1], puoi seguirlo. [1]: https://github.com/plataformatec/devise/issues/2574 –

+0

@ RafałCieślak Grazie per la conferma, seguirò il problema. –

risposta

4

Come Jose Valim said, è la funzione Devise 3.1.0.rc, ecco perché non funziona. Devi usare altre sintassi che sono in README.

5

Prova:

class ApplicationController < ActionController::Base 
     ... 
     before_filter :configure_permitted_parameters, if: :devise_controller? 
     ... 
     def configure_permitted_parameters 
     devise_parameter_sanitizer.for(:sign_up) { |u| 
      u.permit(:email, :password, :password_confirmation, :nick) 
     } 
     end 

Funziona per me! : D

+0

Questo entra nel modello? –

+0

Ho inserito ApplicationController: before_filter: configure_permitted_parameters, if:: devise_controller? –

4

Un problema corrisponde esattamente al tuo problema: #2574 : devise_parameter_sanitizer.for(:sign_up) << :something raises an error.

In effetti, il metodo per aggiungere campi personalizzati a parametri forti come quello è una nuova funzionalità fornita con Devise 3.1.

Poiché la versione corrente in Rubygems.org è 3.0.3, per il momento non è possibile utilizzare questo metodo nel progetto rotaie. Dovrete sovrascrivere le impostazioni predefinite del genere:

devise_parameter_sanitizer.for(:sign_up) do |u| 
    u.permit :email, :password, :password_confirmation, :first_name, :last_name 
end 


Ma se davvero necessario, è possibile modificare il Gemfile e sostituire questa linea

gem 'devise', '3.0.3' 

con questo uno:

gem 'devise', github: 'plataformatec/devise', branch: 'master' 

Quindi si c un add facilmente i campi personalizzati così:

# Single field 
devise_parameter_sanitizer.for(:account_update) << :first_name 
# Multiple fields at a time 
devise_parameter_sanitizer.for(:account_update) << [:first_name, :last_name] 

Ma essere avvertiti, attualmente questo è un candidato uscita: 3.1.0 RC1

+0

sono sempre i piccoli dettagli ... sarebbe bello se lo menzionassero nel readme dei poveri gobub come me ... FWIW l'UNICA cosa che ha funzionato (ho provato alcuni esempi diversi sul web) sta mettendo i miei attrs nel u.permit group come Carlos menziona sopra. – Danny