使用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>
这里有什么不妥?
答案 0 :(得分:18)
你应该知道的第一件事是你的设计版本 因此,请执行以下命令检查rails应用程序上的已安装版本:
cat Gemfile.lock | grep devise
它显示了rails应用程序上安装的哪个版本,就像:
devise (= 3.1.0)
如果你的设计版本是&gt; = 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
版本&lt; 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
答案 1 :(得分:18)
根据this answer,您还可以执行以下操作:
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