当前位置:  开发笔记 > 编程语言 > 正文

无法在Ruby on Rails中为Devise模型添加自定义字段.私有方法错误

如何解决《无法在RubyonRails中为Devise模型添加自定义字段.私有方法错误》经验,为你挑选了2个好方法。

使用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>

这里有什么不对的?



1> Saiqul Haq..:
以下答案可能已经过时,所以请在此处阅读源代码

您应该注意的第一件事是您的设计版本,因此请通过执行以下命令检查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 



2> Richard Peck..:

根据这个答案,您还可以执行以下操作:

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回答不起作用,而这个回答没有.因为我看到它们都具有相同的逻辑输出(仅通过查看代码来做出假设
推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有