Ruby on rails 添加自定义字段以设计用户模型错误
我正在使用gemdevise向我的模型用户添加一个全名(字符串)值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
# 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