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

时间:2015-12-29 11:34:38

标签: ruby-on-rails ruby devise

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

这里有什么不妥?

2 个答案:

答案 0 :(得分:18)

以下答案可能已经过时,请read the source code instead HERE

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