【问题标题】:Can't add custom fields to Devise model in Ruby on Rails. Private method error无法将自定义字段添加到 Ruby on Rails 中的设计模型。私有方法错误
【发布时间】:2015-12-29 11:34:37
【问题描述】:

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

这里有什么问题?

【问题讨论】:

    标签: ruby-on-rails ruby devise


    【解决方案1】:

    根据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
    

    【讨论】:

    • 为什么@Saiqul Haq 的答案不起作用,而这个答案起作用了。正如我所看到的,两者都具有相同的逻辑输出(仅通过查看代码来做出假设
    【解决方案2】:

    下面的答案对你来说可能已经过时了,所以请read the source code instead HERE


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

    对于版本

    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 
    

    【讨论】:

    • 不确定{ roles: [] } 在这个答案中有什么用处......这只是 GitHub 设计 readme.md 上的一个例子,如果正在使用复选框,因为它们不是强参数......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多