我的用户模型如下所示:
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(使用前将#替换为@)