我可以根据另一个关联添加一个关联吗?

2023-12-12

我的用户模型如下所示:

User
   habtm  :Roles


Role
   habtm  :Users


RoleExtension
   belongs_to  :Role

mysql 表:

users
  id
  ..


roles
  id
  ..

roles_users
  user_id
  role_id

role_extensions
  id
  role_id
  feature_id
  ..
  ..

现在到目前为止一切似乎都运行良好。

现在我希望 User 模型具有基于 habtm Roles 集合的 RoleExtensions 集合。

example:

user = User.find(1)
user.Roles  (returns roles with id's of 1,2,3)

所以我想要:

user.RoleExtensions 

返回在 (1,2,3) 中具有 role_id 的所有角色扩展


通常你会使用has_many, :through关联,但这不适用于has_and_belongs_to_many关系。

因此,在您的用户模型中:

def role_extensions
  return roles.inject([]) do |array, role|
    role.role_extensions do |re|
      array.include?(re) ? array << re : array
    end
  end
end

Then my_user.role_extensions应返回属于所有用户角色的所有角色扩展的数组。

注意:我还没有测试过这个,但它应该可以工作

UPDATE: 我比较喜欢这个

def role_extensions
  return roles.inject([]) { |array, role| array << role.role_extensions }.flatten!.uniq
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以根据另一个关联添加一个关联吗? 的相关文章

随机推荐