1

私は従業員ディレクトリアプリケーションを構築しており、自己結合を使用しているため、すべての従業員の関係が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人のマネージャーしかいないと想定しています。

どんな援助も大歓迎です。

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 に答える