Reputation: 672
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?
Upvotes: 11
Views: 4951
Reputation: 2397
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
Upvotes: 18
Reputation: 76774
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
Upvotes: 18