Simple caching

I think you will need to use acts_as_tree (or some other method like nested_set?) rather than using a circular belongs_to in the same class. Try this:

class Agent < ActiveRecord::Base   acts_as_tree :foreign_key => "manager_id"

  def manager_full_name   manager = self.parent   manager_full_name = ''   manager_full_name = manager.full_name unless manager == nil   manager_full_name   end

end

Note: the default foreign_key column to get the parent is parent_id but we can override that since you called it manager_id. Also, self.agent in your example becomes self.parent.

There were a couple of typos in your example that you are probably aware of but here they are anyway: Nil should be lowercase nil and <%= agent.manager_full_name => should be <%= @agent.manager_full_name %>.

To retrieve the agent AND the parent from the database with a single query use the :include parameter as follows: @agent = Agent.find(2), :include => :parent). This will retrieve the agent row for id 2 along with it's parent at the same time.

I don't have a good UI solution for displaying these in heirarchical order. Maybe someone else has tried it.

-Paul

But I don't know how you can add it to the 'list' action when you do a Agent.find(:all). How can you get a list of agents and at the same time load the parent of each agent.

Just do Agent.find(:all, :include => :parent).

-Paul