我正在使用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
有什么想法吗?
答案 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