Rails 5, Undefined `for 'method for # <Devise on line devise_parameter_sanitizer.for
I work with Rails 5
I added a new field username to the user model.
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 An error is displayed during registration: undefined `for 'method for # Did you mean? fork
Trace:
NoMethodError (undefined `for 'method for # you mean? 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) Who can help? How to solve this problem?
+68
Dmitriy May 20 '16 at 8:40 2016-05-20 08:40
source share5 answers
According to the documentation:
Sanitaizer options API 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 +122
Green May 20 '16 at 8:54 2016-05-20 08:54
source shareIf you just change .for to .permit , it also works. For example:
devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit({ roles: [] }, :email, :password, :password_confirmation, :username) } It works in both Rails 4.2.x and Rails 5.0.x
+22
Brandy Burdick Aug 11 '16 at 17:15 2016-08-11 17:15
source shareDo not forget devise_parameter_sanitizer.permit(:account_update, keys: [:username])
+2
Dmitry Polyakovsky Jul 12. '16 at 23:45 2016-07-12 23:45
source share 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 -one
Elias Glyptis Jun 12 '17 at 15:53 ββon 2017-06-12 15:53
source shareAlternatively use Devise gem version 4.1:
gem 'devise', '~> 4.1.0' -one
Daniel Loureiro Jun 26 '17 at 21:50 2017-06-26 21:50
source share