many:many relation on a single table

Consider a tree. Not a perfect example since every branch only has one parent...but you get the idea.

What I want is the following:

Branch.children Branch.parents

I think the problem is not being able to change the method name without changing the attribute it points to. Here is my idea so far.

Thanx for looking!

class Branch < ActiveRecord::Base   has_many :parents, :through => :relations   has_many :children, :through => :relations end

class Relation < ActiveRecord::Base       belongs_to :branch, :foreign_key => "parent_id"       belongs_to :branch, :foreign_key => "child_id" end

---------DB------- table Relations parent_id int child_id int foo --- bar ---

You're going to have to be very, very careful to not create loops (eg situations where something is a child of itself) if you're going after a tree structure. That's the sort of data integrity thing that I would shove right down to the database layer as triggers on your appropriate table.

The schema here (from my old perl days) does that:

http://search.cpan.org/src/CRAKRJACK/Schema-RDBMS-AUS-0.03/schema/

In postgres:

http://search.cpan.org/src/CRAKRJACK/Schema-RDBMS-AUS-0.03/schema/Pg/0.01/216_user_membership_insert.sql

In MySQL:

http://search.cpan.org/src/CRAKRJACK/Schema-RDBMS-AUS-0.03/schema/mysql/0.01/216_user_membership_insert.sql

Hopefully you'll find something there you can use.

  Cheers,     Tyler

Hmm, check out plugins like acts_as_graph: http://blog.tammersaleh.com/pages/acts_as_graph

Jason