Hi, All I was wondering if somebody could suggest a better way to do it. I got it working but it''s a bit dirty and returns too much extra fluff. I''m trying to do a recursive search on an a collection of Objects. A better way to illustrate it is an Org Chart. Lets say I have Employee and ManagedByEmployee Objects Employee hold user id , name, address, etc.... also: has_many :managed_by_employees, :dependent => :destroy ManagedByEmpoyee holds 3 attributes: id, employee_id and managed_by_employee_id also: belongs_to :employee belongs_to :managed_by_employee, :class_name => "Employee", :foreign_key => "managed_by_employee_id" This allows me to do any searches 1 level deep. I can find who this particular employee manages and who he is managed by. That trivial. What I want to do is a drill down search. Let''s say I do: @emps = find_all_by_managed_by_employee_id(3) This would return me all of the empployees that are managed by employee #3, lets say I want to go through that list and check all of the employees and see who they manage, and so on and so forth - until I reach the bottom, where I find employee that don''t manage anyone. Then I want a similar function that goes in the other direction. I wrote a model methods that handle that = but there are 2 problems with them: 1) They return too many duplicate records - and I have to clean them up at the end. 2) I return all of the employees that employee # 3 manages but, I can''t tell how they relate to employee 3 (well I can go through the chain again and figure it out) But there''s got to be a btter way to do it then running more sql statement. Below are my model functions def self.find_employees_that_i_manage(employee, employees_array) arr = employees_array arr += @managed_employees find_all_by_managed_by_employee_id(employee) unless @managed_employees.empty? @managed_employees.each do |s| arr += find_employees_that_i_manage(s.employee_id, arr) end end arr |= arr end def self.find_employees_that_manage_me(employee, employees_array) arr = employees_array arr += @managed_by_employees = find_all_by_employee_id(employee) unless @managed_by_employees.empty? @managed_by_employees.each do |s| arr += find_employees_that_manage_me(s.managed_by_employee_id, arr) end end arr |= arr end Here is how I call them from controller: @manages_employees managedByemployee.find_employees_that_i_manage(params[:id], p=[]) @managed_by_employees managedByemployee.find_employees_that_manage_me(params[:id], p=[]) Anyone has any suggestions? -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---