权限不会超过一个?

时间:2014-05-10 00:19:38

标签: ruby-on-rails jointable has-and-belongs-to-many

我有has_and_belongs_to_many, through: 'table_name'

的基本模型关系

我们可以在这里看到:

角色

module Xaaron
  class Role < ActiveRecord::Base
    extend FriendlyId
    friendly_id :role, use: [:slugged, :history]
    has_and_belongs_to_many :permissions, join_table: 'permissions_roles'

    validates :role, presence: true
    validates_uniqueness_of :role

    def has_permission?(permission_name)
      permissions.where(permission: permission_name).any?
    end

    def permission_names=(names)
      names.each do |name|
        permission = Xaaron::Permission.where(permission: name)
        if permission
          self.permissions = permission
        end
      end
    end
   end
 end

权限

module Xaaron
  class Permission < ActiveRecord::Base
    extend FriendlyId
    friendly_id :permission, use: [:slugged, :history]

    validates :permission, presence: true, uniqueness: true
  end
end

我遇到的问题是角色permission_names,我可以传递一个名称数组:['can_create', 'can_edit', 'can_delete'],它会检查它们是否存在。然而,它只会在连接表中添加一个,它将覆盖那个与下一个,然后是最后一个,导致关系只显示一个角色的一个权限,当它应该是一个角色的三个权限

所以我打开了rails c并执行了以下操作:

@role.permissions.create(permission: 'example')

我发现直接通过这种类型的链接,我可以为角色创建多个权限。我不想动态为角色创建多个权限。我想为已经存在的角色分配权限,并分配一个或分配100并让它们全部显示。

我需要做什么,@role.permission_names(['perm1', 'perm2', ...]),并让它为该角色分配所有权限(如果存在)?

1 个答案:

答案 0 :(得分:1)

您的permission_names=方法定义是问题所在。在其中,您将self.permissions设置为包含单个元素的数组。

试试这个。

def permission_names=(names)
  self.permissions = Xaaron::Permission.where(name: names)
end