Forum: Ruby on Rails Self-referencing model

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
F829625a16f80155979888247dfed720?d=identicon&s=25 David Hill (esmale)
on 2008-10-08 02:53
I'm fairly new to Ruby on Rails, and am having trouble figuring out how
to do this.  I have a model called Organization.  I want to set things
up so that an org can have sub-orgs (which can have sub-orgs
themselves).

Can anyone point me to a good example or explanation (or provide one
directly) so I can get an idea of how to do this?

Thanks!
76d07ac70a63a21c650419fbb77de62f?d=identicon&s=25 stuart.coyle (Guest)
on 2008-10-08 03:11
(Received via mailing list)
I've just been doing this myself with systems and sub-systems.

In the system model I have:

  has_many :sub_systems, :class_name => "System", :foreign_key =>
"system_id", :dependent=>:nullify

Then you can refer to the system.sub_systems

I also have code to prevent loops which will go around forever if you
traverse the system-sub-system tree.

 def validate
    errors.add(:sub_systems, "Cannot be a subsystem of itself.") if
all_subs.include?(self)
  end


def all_subs(subs = [])
    self.sub_systems.each do |s|
      unless subs.include?(s)
        subs << s
        s.all_subs(subs)
      end
    end
    subs
  end

Hope that helps.

On Oct 8, 10:53 am, David Hill <rails-mailing-l...@andreas-s.net>
3991f1dedc443618e34241312283dc60?d=identicon&s=25 Michael Sofaer (Guest)
on 2008-10-08 03:11
(Received via mailing list)
Look into the :as and :source options for the has_many and belongs_to
associations, they should be able to do what you need.

Good luck!

On Oct 7, 5:53 pm, David Hill <rails-mailing-l...@andreas-s.net>
76d07ac70a63a21c650419fbb77de62f?d=identicon&s=25 stuart.coyle (Guest)
on 2008-10-08 03:14
(Received via mailing list)
I forgot this - you also have to have

belongs_to :system
883c3f1191ae15da9001b55ad2ad01e2?d=identicon&s=25 Alex Bartlow (alexbartlow)
on 2008-10-08 05:52
(Received via mailing list)
Acts as Tree:

http://wiki.rubyonrails.org/rails/pages/ActsAsTree

Does everything you need.

On Oct 7, 8:53 pm, David Hill <rails-mailing-l...@andreas-s.net>
This topic is locked and can not be replied to.