0

従業員を一覧表示し、自己結合を使用してマネージャーと direct_reports を表示するアプリケーションを作成しています。

私のモデルには次のものがあります。

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

私の見解では、名前 (fname と lame に分割) がリンクを構成する従業員のすべての direct_reports へのリンクを作成しようとしています。

現在、direct_reports に対する私の見解では、Rails ガイドが推奨する次のようなものがあります。

<%= @person.direct_reports %>

その結果、これが生成されます。

    [#<Person id: 3674, fname: "Leland", lname: "Allison", phone: "8474020494", email: 
    "leland.allison@myco.com", ntid: "lalli", address: "3568 Sanders Rd.", city: 
    "Northbrook", state: "IL", zipcode: "60062", country: "USA", suite: nil, column: 
    nil, title: nil, department: nil, created_at: "2013-02-01 19:17:58", updated_at: 
    "2013-02-01 19:17:58", equipment: nil, capacity: nil, latitude: nil, longitude: 
    nil, manager: nil, direct_report: nil, manager_id: 3668>, #<Person id: 3685, fname:
     "Rochelle", lname: "Baldwin", phone: "8474020338", email: "rochelle.baldwin@myco.com",
     ntid: "rbald", address: "3412 Sanders Rd.", city: "Northbrook", state: "IL", 
    zipcode: "60062", country: "USA", suite: nil, column: nil, title: nil, department: 
    nil, created_at: "2013-02-01 19:17:58", updated_at: "2013-02-01 19:17:58", equipment: 
    nil, capacity: nil, latitude: nil, longitude: nil, manager: nil, direct_report: nil,
     manager_id: 3668>, #<Person id: 3692, fname: "Tammy", lname: "Barnett", phone: 
    "8474020275", email: "tammy.barnett@myco.com", ntid: "tbarn", address: "3349 
    Sanders Rd.", city: "Northbrook", state: "IL", zipcode: "60062", country: "USA", 
    suite: nil, column: nil, title: nil, department: nil, created_at: "2013-02-01 19:17:58",
     updated_at: "2013-02-01 19:17:58", equipment: nil, capacity: nil, latitude: nil, 
    longitude: nil, manager: nil, direct_report: nil, manager_id: 3668>]

したがって、明らかに各レコードのオブジェクト全体を取得していますが、これは必要以上のものです。

私は自分の見解に次のことを入れてみました:

<% @people.each do |person| %>
  <%= link_to person.lname + ", " + person.fname, person %>
<% end %>

しかし、それは機能していません。"undefined method `each' for nil:NilClass" エラーが発生します。

何か案は?

4

3 に答える 3

1

を定義していない@Peopleため、 each はありません。それはそのようになります@person.direct_reports.each

于 2013-02-01T21:52:49.057 に答える
1

値を任意の変数に保存してから、それぞれに適用する必要があります。@people変数の定義はありません。したがって@people、nil です。

コードはコントローラーで次のようになります。

@people = @person.direct_reports  

ビューでは、コードは次のようになります。

 <% @people.each do |person| %>
        <%= link_to person.lname + ", " + person.fname, person %>
    <% end %>

これで動作します

于 2013-02-01T21:55:54.840 に答える
0

def people_and_reports(person)
  [person, person.direct_reports.map {|p| people_and_reports(p)}].flatten.uniq
end

@people = people_and_reports(@person)

おっと..質問を読み直してください..これは、人からすべてのレポートとレポートのレポートに再帰的に降りていきます。おそらく @people = @person.direct_reports だけが必要です

于 2013-02-01T21:58:48.170 に答える