从大型数组获取link_to属性

时间:2013-02-01 21:38:50

标签: ruby-on-rails ruby

我正在创建一个列出员工的应用程序,并使用自联接来显示经理和direct_report。

在我的模特中,我有:

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

在我看来,我正在尝试链接到员工的所有direct_report,他们的名字(拆分为fname和lame)构成了链接。

目前在我对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 %>

但这不起作用。我得到一个“未定义的方法`每个'为nil:NilClass”错误。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您尚未定义@People,因此没有定义@person.direct_reports.each。它将是{{1}}

答案 1 :(得分:1)

您应该将值保存在任何变量中,然后在其上应用每个变量。 没有@people变量定义,因此@people是零。

您的代码在控制器中将如下所示:

@people = @person.direct_reports  

并且在视图中您的代码将如下所示:

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

现在可以使用

答案 2 :(得分:0)

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

@people = people_and_reports(@person)

Whooops ..只是重读问题..这将递归地从一个人走到报告的所有报告和报告。你可能只需要@people = @ person.direct_reports