我正在使用设计验证,现在在注册步骤中我想添加额外的参数,所以我使用devise_parameter_sanitizer
如下
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email, :subdomain, :phone, :company, role_ids: []])
end
如果我通过role_ids
rails会自动为用户添加角色,但我想传递role_names
而不是role_ids
,但它会给我错误
ActiveModel::UnknownAttributeError (unknown attribute 'roles_name' for User.)
编辑:
models/user.rb
has_many :roles_user, dependent: :destroy
has_many :roles, through: :roles_user
答案 0 :(得分:0)
role_names=
上是否定义了User
?你有role_names
的数据库字段或关系吗?也许您只需将role_ids
列重命名为数据库中的role_names
。
答案 1 :(得分:0)
我使用以下方式解决问题
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email, :subdomain, :phone, :company, role_names: []])
end
在role_names
devise_parameter_sanitizer
在role_names=
models/user.rb
的新方法
def role_names=(role)
roles = Role.where("name IN (?)", role)
self.roles << roles
end