Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 添加自定义字段以设计用户模型错误_Ruby On Rails_Devise_Strong Parameters - Fatal编程技术网

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

Ruby on rails 添加自定义字段以设计用户模型错误,ruby-on-rails,devise,strong-parameters,Ruby On Rails,Devise,Strong Parameters,我正在使用gemdevise向我的模型用户添加一个全名(字符串)值 # app/controllers/application_controller.rb class ApplicationController < ActionController::Base include Authorization protect_from_forgery with: :exception end #app/controllers/application_controller.rb 类Ap

我正在使用gemdevise向我的模型用户添加一个全名(字符串)值

# app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  include Authorization
  protect_from_forgery with: :exception
end
#app/controllers/application_controller.rb
类ApplicationController
而且

# 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
#app/controllers/concerns/Authorization.rb
模块认证
扩展ActiveSupport::关注点
私有的
def设计参数消毒剂
如果资源类==用户
User::ParameterSanitizer.new(用户,:用户,参数)
其他的
超级的
结束
结束
结束
#app/controllers/sanitizers/user/parameter_sanitizer.rb
类用户
类ParameterSanitizer<设计::ParameterSanitizer
用户参数=%i(
全名
电子邮件
密码
密码确认
).别动
def注册
默认参数许可(用户参数)
结束
def帐户更新
默认参数许可(用户参数)
结束
结束
结束
一切都应该正常,但我在创建用户时出错
Unpermitted参数:全名


有什么想法吗?

我认为问题在于
USER\u PARAMS
是一个数组

USER_PARAMS
# => [:full_name, :email, :password, :password_confirmation]
但您需要允许这样的属性

permit(:full_name, :email, :password, ...)
所以你可以试着去做

default_params.permit(*USER_PARAMS)
更新

查看设备。
您似乎可以使用
设计参数\u消毒剂。允许
允许附加键,例如
:注册
操作。

请注意,Deviate已经定义了一些
默认\u允许的\u属性
,因此您不需要重新定义它们

所以我认为下面的代码应该适合您

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
class ApplicationController
仍然存在相同的问题该问题显然与强参数有关。您是否仍有未经允许的参数:全名?是的,仍然是相同的错误,整天都在试图解决问题。我将尝试自己重现问题,以给出100%肯定的答案。顺便问一下,你可以分享你的代码吗?
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