Rails:查找同一代的所有children
Rails: Find all children from the same generation
在我的申请中我有职位。每个位置有一个 parent 和许多 children 个位置。如何导航树并找到同一代中的所有位置?
目前我有这个:
def org_chart_level
ps = self
level = 10
while ps do
break if ps.reports_to == nil
ps = ps.reports_to
level += 10
end
if self.reports_to
siblings = self.reports_to.responsible_for
else
siblings = [self]
puts siblings
end
"#{level}-#{siblings.index(self) + 1}"
end
这几乎可以工作,因为它可以给我一个职位的级别,它可以告诉我它是 parent 中的哪个兄弟姐妹,但它不能告诉我它是哪一代兄弟姐妹。
每个位置的预期水平。
1.1
-2.1
-3.1
-2.2
-3.2
实际水平:
1.1
-2.1
-3.1
-2.2
-3.1
我最终在保存位置生成之前将其存储在数据库中。
before_save :find_generation
def find_generation
ps = self
i = 0
while ps do
break if ps.reports_to == nil
ps = ps.reports_to
i += 1
end
self.generation = i
end
然后当我需要生成组织结构图级别时:
def org_chart_level
ps = self
level = 10
while ps do
break if ps.reports_to == nil
ps = ps.reports_to
level += 10
end
generation = organization.positions.where(generation: self.generation) #position belongs to organization.
"#{level}-#{generation.index(self) + 1}"
end
在我的申请中我有职位。每个位置有一个 parent 和许多 children 个位置。如何导航树并找到同一代中的所有位置?
目前我有这个:
def org_chart_level
ps = self
level = 10
while ps do
break if ps.reports_to == nil
ps = ps.reports_to
level += 10
end
if self.reports_to
siblings = self.reports_to.responsible_for
else
siblings = [self]
puts siblings
end
"#{level}-#{siblings.index(self) + 1}"
end
这几乎可以工作,因为它可以给我一个职位的级别,它可以告诉我它是 parent 中的哪个兄弟姐妹,但它不能告诉我它是哪一代兄弟姐妹。
每个位置的预期水平。
1.1
-2.1
-3.1
-2.2
-3.2
实际水平:
1.1
-2.1
-3.1
-2.2
-3.1
我最终在保存位置生成之前将其存储在数据库中。
before_save :find_generation
def find_generation
ps = self
i = 0
while ps do
break if ps.reports_to == nil
ps = ps.reports_to
i += 1
end
self.generation = i
end
然后当我需要生成组织结构图级别时:
def org_chart_level
ps = self
level = 10
while ps do
break if ps.reports_to == nil
ps = ps.reports_to
level += 10
end
generation = organization.positions.where(generation: self.generation) #position belongs to organization.
"#{level}-#{generation.index(self) + 1}"
end