使用Devise gem生成用户模型.
尝试添加"用户名"属性.
随后的官方文档,现在我的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>
这里有什么不对的?
您应该注意的第一件事是您的设计版本,因此请通过执行以下命令检查rails应用程序上的已安装版本:
cat Gemfile.lock | grep devise
它显示了在rails应用程序上安装的哪个设计版本,它就像:
devise (= 3.1.0)
如果你的设计版本是> = 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
根据这个答案,您还可以执行以下操作:
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