设计角色

时间:2017-04-03 12:01:09

标签: ruby-on-rails devise

我正在使用设计验证,现在在注册步骤中我想添加额外的参数,所以我使用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

2 个答案:

答案 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