通过关联关闭树?

时间:2014-11-14 22:37:01

标签: ruby

我使用闭包树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]]

1 个答案:

答案 0 :(得分:0)

如果您可以使用平面列表满足您的需求,则调用user.org.self_and_descendants将返回一个数组,该数组首先包含用户的组织,然后是此组织的后代,依此类推。数组按生成级别排序。

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

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