Forum: Ruby on Rails HABTM -VS- belongs_to/has_many, for self-referential joins

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Greg E. (Guest)
on 2006-02-16 02:00
(Received via mailing list)
Ok, David says on page 241 that sometimes a many-to-many relation with
attributes are better implemented as an actual model instead of using
Well, I've got that situation and I can't figure it out.

All of the examples in the book have HABTM examples between 2 different
tables, but I want to have a HABTM relation on 1 table with itself.
if I have a table Things, then I would like one "Thing" to "helpout"


Table 1: "Thing"

Column: Name


Table2: "Helps"

Column: thing_id  (e.g. "this thing.")

Column: helps_id (. "helps that thing")


It seems like I might want to use a HABTM, but I can't figure out the

OR (and I think this is what I actually need / want to do), I need a
separate model to represent Helps which has some belongs_to / has_many
relationships in it (I think this is better because then I could do some
interesting complex reporting on the "Helps" table, such as "who helps
most number of other things?").

Any ideas how to set this up in the Models? And, what would be the right
to say:

thing1.helps << thing2 (i.e. we need to document the fact that thing1



Greg E.

CTO, Eyetools Inc.


(916) 792 4538
Dylan S. (Guest)
on 2006-02-16 04:08
(Received via mailing list)
I think Chad tackles this exact scenerio in the Recipes book that's out
beta (available in PDF) right now.
Don't have it on my computer right now, but I think you need to do

   habtm :helps,
   :class_name => "Thing"
   :join_table => "helps_things"

... etc... where the "helps_things" is your Join table (so you'd have
"things" table, and one "helps_things" table).
I think you have to maybe specify :foreign_key => "thing_id" and there
another declaration maybe of :assoc_foreign_key => "thing" maybe...

I stared at this chapter in the PDF for a loooooooong time, but probably
forgot something.
You can probably figure it out from the above, and looking at the HABTM
This topic is locked and can not be replied to.