2016-05-20 5 views
74

ich mit Rails arbeite 5Rails 5, nicht definierte Methode `für‘ for # <on line Entwickeln devise_parameter_sanitizer.for

ich neues Feld Benutzernamen in Modell Benutzer aded.

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 

Bei der Registrierung Fehler angezeigt wird: nicht definierte Methode `für‘ for # Meinen Sie? Gabel

Trace:

NoMethodError (nicht definierte Methode `für‘ for # Meinten Sie Gabel?):

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) 

Wer kann helfen? Wie löst man dieses Problem?

+1

Es geschieht on Rails auch 4.2 . – sekrett

Antwort

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

aus irgendeinem Grund funktioniert das aber, wenn ich Schienen neu starte, hört es auf, wieder zu arbeiten – K2xL

+0

@ K2xL Löschen Sie Ihre bin? Hoppla, sein Oktober. Wie hast du das behoben? – snowYetis

+0

stop + restart frühling, pehaps – phillyslick

2

Vergessen Sie nicht, devise_parameter_sanitizer.permit(:account_update, keys: [:username])

+1

Er hat nicht vergessen, er muss zu neuer Syntax wechseln. – sekrett

24

Wenn Sie nur die .for ändern .permit es auch funktioniert. Zum Beispiel:

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

Es beide in Rails 4.2.x funktioniert und Rails 5.0.x

-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

Alternativ verwenden Devise gem Version 4.1:

gem 'devise', '~> 4.1.0' 
Verwandte Themen