2016-05-20 13 views
74

Pracuję z Rails 5Szyny 5, metoda niezdefiniowany `za” dla # <Opracować na linii devise_parameter_sanitizer.for

I aded nową nazwę użytkownika pola w modelu Użytkownika.

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 

Podczas rejestracji wyświetlany jest błąd: niezdefiniowana metoda `za” na # Czy miałeś na myśli? widelec

Ślad:

NoMethodError (metoda niezdefiniowany `za” dla # Czy chodziło Ci widelec?):

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) 

Kto może pomóc? Jak rozwiązać ten problem?

+1

Zdarza się on Rails 4.2 także . – sekrett

Odpowiedz

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

z jakiegoś powodu to działa, ale kiedy ponownie uruchomię szyny, przestaje działać ponownie – K2xL

+0

@ K2xL Wyczyść swój pojemnik? Ups, październik. Jak to naprawiłeś? – snowYetis

+0

stop + uruchom ponownie sprężynę, być może – phillyslick

2

Nie zapomnij devise_parameter_sanitizer.permit(:account_update, keys: [:username])

+1

Nie zapomniał, musi przełączyć się na nową składnię. – sekrett

24

Jeśli tylko zmienić .for do .permit to działa tak samo. Na przykład:

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

Działa zarówno w Rails 4.2.x oraz 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

Alternatywnie wykorzystać opracować gem w wersji 4.1:

gem 'devise', '~> 4.1.0'