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

lmm19891114 · 2015年03月23日 · 最后由 huopo125 回复于 2015年03月24日 · 2342 次阅读

我在做管理员创建用户功能,引入了一个 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
需要 登录 后方可回复, 如果你还没有账号请 注册新账号