添加自定义字段以设计用户模型错误

时间:2016-10-28 12:23:51

标签: ruby-on-rails devise strong-parameters

我正在使用gem Devise将full_name(string)值添加到我的模型User。

# app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  include Authorization
  protect_from_forgery with: :exception
end

# app/controllers/concerns/Authorization.rb

module Authentication
  extend ActiveSupport::Concern

  private

  def devise_parameter_sanitizer
    if resource_class == User
      User::ParameterSanitizer.new(User, :user, params)
    else
      super
    end

  end
end


# app/controllers/sanitizers/user/parameter_sanitizer.rb

class User
  class ParameterSanitizer < Devise::ParameterSanitizer
    USER_PARAMS = %i(
      full_name
      email
      password
      password_confirmation
    ).freeze

    def sign_up
      default_params.permit(USER_PARAMS)
    end

    def account_update
      default_params.permit(USER_PARAMS)
    end
  end
end

一切都应该有效,但我在创建用户时遇到错误 Unpermitted parameter: full_name

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我认为问题是USER_PARAMS是一个数组。

USER_PARAMS
# => [:full_name, :email, :password, :password_confirmation]

但你需要允许像

这样的属性
permit(:full_name, :email, :password, ...)

所以你可以尝试做

default_params.permit(*USER_PARAMS)

<强>更新

查看设计source code 您似乎可以使用devise_parameter_sanitizer.permit来允许其他键,例如:sign_up操作 喜欢

devise_parameter_sanitizer.permit(:sign_up, keys: [:full_name])

请注意,设计已定义了一些DEFAULT_PERMITTED_ATTRIBUTES,因此您无需重新定义它们。

所以我认为以下代码应该适合你

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:full_name])
    devise_parameter_sanitizer.permit(:account_update, keys: [:full_name])
  end
end