Gem 我用的是 rolify 的一个 gem 包,我在更新用户角色的时候,用户的角色居然删除了

lmm19891114 · March 23, 2015 · Last by huopo125 replied at March 24, 2015 · 2336 hits

我在做管理员创建用户功能,引入了一个 rolify 的 gem 包,用了第三张表,用户和角色表叫 users_roles 里面有两个字段 user_id 和 role_id 但是在做编辑用户的时候,修改角色,应该修改 user_id 和 role_id 的对应关系,但此时 roles 表的数据也删除了,这是为什么呢?

if @user.present? && @user.roles[0].name != params['role']
  @user.remove_role(@user.roles[0].name);
  @user.add_role(params['role'])
end

应该是你设置的 role,关联的 user 数量为 0,rolify 自动帮你清除掉了code

def remove(relation, role_name, resource = nil)
  cond = { :name => role_name }
  cond[:resource_type] = (resource.is_a?(Class) ? resource.to_s : resource.class.name) if resource
  cond[:resource_id] = resource.id if resource && !resource.is_a?(Class)
  roles = relation.roles.where(cond)
  if roles
    relation.roles.delete(roles)
    roles.each do |role|
      role.destroy if role.send(ActiveSupport::Inflector.demodulize(user_class).tableize.to_sym).limit(1).empty?
    end if Rolify.remove_role_if_empty
  end
  roles
end
You need to Sign in before reply, if you don't have an account, please Sign up first.