2013-05-04 5 views
53

Sto usando il ramo 4.0 di rails di rails insieme a ruby ​​2.0.0p0 e Rails 4.0.0.beta1.Parametri resistenti con Rails e Devise

Questo è il tipo di domanda in cui sto verificando se lo sto facendo nel modo giusto, o se ci sono altre cose che dovrei fare. Sono sicuro che molte persone che si spostano su Rails 4.0 si trovano ad affrontare gli stessi problemi (dopo aver cercato su google per cose simili).

Ho letto i seguenti link:

Ora utilizzando medito ho creato un modello User, ho creato il seguente controller utilizzando i GIST di cui sopra (e ho fatto in modo di includerlo nel mio file di percorsi). I miei parametri extra sono first_name e last_name.

class Users::RegistrationsController < Devise::RegistrationsController 
    def sign_up_params 
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation) 
    end 
    def account_update_params 
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_password) 
    end 
    private :sign_up_params 
    private :account_update_params 
end 

C'è qualcos'altro che dovrei fare? È questo il modo migliore di fare le cose da ora in poi (dal momento che ha lasciato attr_accessor). Le mie forme sembrano funzionare bene (sia il nuovo che l'aggiornamento). Gli elenchi dicevano di usare "resource_params" ma che dava sempre l'errore "Unpermitted parameters" nel mio log del server.

risposta

67

Grazie per gli ultimi aggiornamenti sul ramo Rails4 di Devise, non è davvero necessario inserire "resource_params".

Ho creato una nuovissima app Rails4 e ho seguito i passi di installazione di Devise e la mia app funziona correttamente, quindi penso che hai fatto bene.

Ma c'è un succo modificato che vi dà alcuni dettagli in più in termini di parametri consentiti se avete bisogno:

Fonte: https://gist.github.com/bluemont/e304e65e7e15d77d3cb9

# controllers/users/registrations_controller.rb 
class Users::RegistrationsController < Devise::RegistrationsController 

    before_filter :configure_permitted_parameters 

    protected 

    # my custom fields are :name, :heard_how 
    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) do |u| 
     u.permit(:name, :heard_how, 
     :email, :password, :password_confirmation) 
    end 
    devise_parameter_sanitizer.for(:account_update) do |u| 
     u.permit(:name, 
     :email, :password, :password_confirmation, :current_password) 
    end 
    end 
end 
+3

Grazie mille! Mi ha salvato. – b0xxed1n

+1

Grazie, mi ha aiutato anche io. Questa dovrebbe essere la risposta accettata. –

7

Funziona molto bello, con l'aggiunta di un modulo in config/initializers con tutto parameters come questo

module DevisePermittedParameters 
    extend ActiveSupport::Concern 

    included do 
    before_filter :configure_permitted_parameters 
    end 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password, :password_confirmation) } 
    end 

end 

DeviseController.send :include, DevisePermittedParameters 
+1

Ho provato questo metodo ma non ha funzionato per me. C'è qualcosa che deve essere fatto sul lato controller per includere il modulo o sarebbe automatico? – Batman

+0

wow il tuo è più elegante :) bello. –

25

Per Rails 5, Elaborare 4 Utilizzare questo:

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

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email, :password, :password_confirmation]) 
    end 
end 

Reference

+0

Questo era esattamente quello di cui avevo bisogno. Apprezzalo. – DNorthrup