1

我正在构建一个员工目录应用程序并使用自联接,因此所有员工关系都在一个表中。

我有下属(direct_reports)显示,我可以显示个人的经理。

这是我的模型:

has_many :direct_reports, :class_name => "Person", :foreign_key => "manager_id"
belongs_to :manager, :class_name => "Person"

这是我的看法:

<tr><td>Manager:</td><td><strong><%= link_to "Manager", @person.manager %></strong></td></tr>

    <tr><td>Direct Reports:</td><td><strong><% @person.direct_reports.each do |person| %>
                    <%= link_to person.lname + ", " + person.fname, person %><br>
                    <% end %></strong></td></tr>

但是,我还没有找到任何方法来显示组织中以上人员的完整报告层次结构。是的,我要展示经理,但我需要展示他们的经理和他们的经理等,一直到 CEO。

我假设每个人都只有一位经理(在链条上)。

非常感谢任何帮助。

4

2 回答 2

2

你想要的是一个树状结构,每个员工可以有一个经理,经理也可以有老板,等等。

尝试祖先。非常适合。您会自动获得范围,例如siblings让所有员工共享同一个经理等。

于 2013-02-04T20:19:32.107 回答
1

没有任何简单的方法可以使用单个 SQL 查询(如 Postgres 对此提供支持的评论中所述),除非您可以将其限制为预定数量的级别。否则,您可以简单地循环调用经理的经理,直到您得到 nil 结果。

<% manager = @person.manager
while manager do %>
  <tr><td>Manager:</td><td><strong><%= link_to manager.lname + ", " + manager.fname, manager %></strong></td></tr>
<% manager = manager.manager
end %>
于 2013-02-04T20:18:41.273 回答