Невозможно добавить настраиваемые поля для создания модели в Ruby on Rails. Частная ошибка метода

Сгенерированная модель пользователя с использованием драгоценного камня "Разработка".

Попытка добавить атрибут 'username'.

Следуя официальной документации, теперь мой ApplicationController выглядит следующим образом:

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

Когда я пытаюсь перейти на страницу обновления учетной записи, я получаю следующую ошибку:

NoMethodError in Devise::RegistrationsController#edit

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

Что здесь может быть неправильным?

Ответ 1

В соответствии с этим ответом вы также можете сделать следующее:

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

Ответ 2

Ниже ответ может быть устаревшим для вас, поэтому прочитайте исходный код вместо ЗДЕСЬ


Первое, что вам нужно знать, это ваша версия для разработки поэтому проверьте установленную версию на вашем приложении rails, выполнив следующую команду:

cat Gemfile.lock | grep devise

показывает, какая версия, установленная в вашем приложении rails, выглядит так:

devise (= 3.1.0)

Если версия вашего проектa >= 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

для версии < 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