我使用闭包树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 :(得分:0)
如果您可以使用平面列表满足您的需求,则调用user.org.self_and_descendants
将返回一个数组,该数组首先包含用户的组织,然后是此组织的后代,依此类推。数组按生成级别排序。
如果组织的顺序及其层次结构很重要,则closure_tree可以返回hash tree。致电user.org.hash_tree
。它将返回嵌套的OrderedHash个对象,键是orgs,值是他们孩子的OrderedHashes。
closure_tree gem documentation有两种方法的例子。