2016-05-20 42 views
74

Sto lavorando con Rails 5Rails 5, metodo non definito `per' per # <Elaborare on line devise_parameter_sanitizer.for

ho ADED nuovo nome utente nel campo modello User.

class Users::RegistrationsController < Devise::RegistrationsController 
    before_action :configure_permitted_parameters 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up).push(:username) 
    end 
end 

Durante la registrazione viene visualizzato l'errore: metodo non definito `per' per # Forse cercavi? forchetta

Trace:

NoMethodError (metodo non definito `per' per # Forse cercavi fork?):

app/controllers/users/registrations_controller.rb:7:in `configure_permitted_parameters' 
    Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout 
    Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb 
    Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (5.0ms) 
    Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb 
    Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.9ms) 
    Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb 
    Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.2ms) 
    Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (118.1ms) 

Chi può aiutare? Come risolvere questo problema?

+1

Succede on Rails 4.2 anche . – sekrett

risposta

129

According to the documentation:

The Parameter Sanitaizer API has changed for Devise 4

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

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username]) 
    end 
end 
+0

per qualche motivo questo funziona, ma quando ricomincio rotaie smette di funzionare nuovamente – K2xL

+0

@ K2xL Cancella il cestino? Ops, il suo ottobre. Come hai risolto questo? – snowYetis

+0

stop + restart spring, pehaps – phillyslick

2

Non dimenticare devise_parameter_sanitizer.permit(:account_update, keys: [:username])

+1

Non ha dimenticato, ha bisogno di passare alla nuova sintassi. – sekrett

24

Se basta cambiare il .for-.permit funziona pure. Per esempio:

devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit({ roles: [] }, :email, :password, :password_confirmation, :username) } 

Funziona sia in Rails 4.2.x e 5.0.x Rails

-1
class ApplicationController < ActionController::Base 

    before_action :configure_permitted_paramters, if: :devise_controller? 

    protected 
    def configure_permitted_paramters 

     devise_parameter_sanitizer.permit(:sign_up, keys: [:fullname]) 

     devise_parameter_sanitizer.permit(:account_update, keys: [:fullname, 
     :phone_number, :description, :email, :password]) 

    end 

end 
-1

In alternativa, utilizzare Devise gemma versione 4.1:

gem 'devise', '~> 4.1.0'