2014-11-14 102 views
0

我正在使用闭合树gem来为组织提供层次结构。通过关联关闭树?

每个组织可以有许多用户。

class Org < ActiveRecord::Base 
    has_many :users 

    acts_as_tree 
end 

class User < ActiveRecord::Base 
    belongs_to :org 
end 

给定一组的单位,以及属于自己的用户,如何我返回单位部门,他们用户属于同层次?

o1 = Org.create! 
o2 = Org.create! 
o3 = Org.create! 
o4 = Org.create! 
o1.children = [o2,o3] 
o3.children = [o4] 

u = User.create 
o3.users << u 

u.some_org_hierarchy_meth 

> [o3 => [ o4]] 

回答

0

如果你能满足你的需要有一个平坦的列表,调用user.org.self_and_descendants将返回第一个包含用户的组织,那么这个组织的后裔,等等的阵列。该数组按照生成级别排序。

如果组织的顺序及其层次很重要,closure_tree可以返回hash tree。致电user.org.hash_tree。它将返回嵌套的OrderedHash对象,键是orgs,值是其子对象的OrderedHashes。

closure_tree gem documentation有这两种方法的例子。