11

Generated User model using Devise gem.

Trying to add 'username' attribute.

Followed official documentation, now my ApplicationController looks like this:

class ApplicationController < ActionController::Base

  protect_from_forgery with: :exception
  before_action :configure_permitted_parameters, if: :devise_controller?
  before_action :authenticate_user!

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:account_update, keys: [:username])
    devise_parameter_sanitizer.permit(:sign_in, keys: [:username])
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
  end

end

When I try to go to account update page I get following error:

NoMethodError in Devise::RegistrationsController#edit

private method `permit' called for #Devise::ParameterSanitizer:0x007f13396cf180>

What can be wrong in here?

Marat
  • 622
  • 7
  • 21

2 Answers2

18

Below answer might be outdated for you, so please read the source code instead HERE


First thing that you should aware is your devise version so check the installed version on your rails app by do following command:

cat Gemfile.lock | grep devise

it shows which devise version that installed on your rails app, it's like:

devise (= 3.1.0)

If your devise's version is >= 4.0.0.rc1

def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up) do |user_params|
    user_params.permit({ roles: [] }, :email, :password, :password_confirmation)
  end
end

for version < 4.0.0.rc1

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_in)        << :username
  devise_parameter_sanitizer.for(:sign_up)        << :username
  devise_parameter_sanitizer.for(:account_update) << :username
end 
Saiqul Haq
  • 2,287
  • 16
  • 18
  • Not sure how `{ roles: [] }` is any use in this answer.... That was just an example on the GitHub devise readme.md if checkboxes are being used since they are not strong params... – Mark Dec 28 '17 at 14:42
18

According to this answer, you can also do the following:

def configure_permitted_parameters
   devise_parameter_sanitizer.for(:sign_in)        << :username
   devise_parameter_sanitizer.for(:sign_up)        << :username
   devise_parameter_sanitizer.for(:account_update) << :username
end
Community
  • 1
  • 1
Richard Peck
  • 76,116
  • 9
  • 93
  • 147
  • 2
    Why @Saiqul Haq answer not worked , while this one did . As i'm seeing that both have the same logical output (making the assumption just by looking at the codes – Mani Feb 04 '16 at 07:41