2013-02-04 77 views
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展示他們的經理和經理等。

我假設每個人只有一個經理(在鏈上)。

任何援助不勝感激。

回答

1

沒有做到這一點使用(如在評論中所指出Postgres有這個支持)單個SQL查詢,除非你可以限制它的水平的預定數量的任何容易方式。否則,你可以直接調用經理的經理,直到你得到一個零結果。

<% 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 %> 
+0

不正確,PostgreSQL已經理解了[遞歸查詢](http://www.postgresql.org/docs/current/static/queries-with .html)很長一段時間。 –

+0

@ muistooshort:非常好 - 你知道是否有任何第三方插件使用ActiveRecord?前面提到的'血統'寶石似乎沒有。看起來像一個項目只是等待建立 - 我會看看我是否可以在這裏做點什麼... – PinnyM

+0

找到[本文](http://blog.hashrocket.com/posts/recursive-sql-in-activerecord)完全按照你的建議來做。奇蹟它還沒有被集成到任何我能找到的東西中...... – PinnyM

2

你想要的是一個樹形結構,每個員工都可以有一個經理和管理人員也可以有老闆等

試用Ancestry。對此非常有用。您自動獲得像siblings這樣的示波器,以便爲所有員工分享相同的經理等。