# How do I model self-referential entities?

**URL:** <https://www.ruby-forum.com/t/how-do-i-model-self-referential-entities/77645>\
**Category:** Rails\
**Created:** [November 29, 2006, 1:46pm UTC](https://www.ruby-forum.com/t/how-do-i-model-self-referential-entities/77645 "2006-11-29T13:46:56Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![lkfken](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/7bcc69/32.png) [@lkfken](https://www.ruby-forum.com/u/lkfken)\
**Post date:** [November 29, 2006, 1:46pm UTC](https://www.ruby-forum.com/t/how-do-i-model-self-referential-entities/77645/1 "2006-11-29T13:46:56Z")

</div>

Hi all -

I am having some trouble figuring out how to model self-referential  
entities in Rails.

I have a “group” model, which can have 0 or more “group” objects or 0 or  
more “user” objects.

I tried creating a subgroup table that has a parent\_group\_id and a  
child\_group\_id as foreign keys but can’t figure out how to create the  
mapping in my ruby model classes. I can’t come up with the correct  
parameters for habtm or has\_many :through.

Any help would be appreciated.

Ken

---

<div class="post-metadata">

**Author:** ![lkfken](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/7bcc69/32.png) [@lkfken](https://www.ruby-forum.com/u/lkfken)\
**Post date:** [November 29, 2006, 2:15pm UTC](https://www.ruby-forum.com/t/how-do-i-model-self-referential-entities/77645/2 "2006-11-29T14:15:01Z")

</div>

Well the relationship between groups & users is simple with a  
has\_and\_belongs\_to\_many or has\_many :through association…

for stuff with parent & child groups, have a look at acts\_as\_nested\_set  
or \_acts\_as\_tree  
in the rails API docs … exactly what you need i think.

---

<div class="post-metadata">

**Author:** ![lkfken](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/7bcc69/32.png) [@lkfken](https://www.ruby-forum.com/u/lkfken)\
**Post date:** [November 29, 2006, 5:21pm UTC](https://www.ruby-forum.com/t/how-do-i-model-self-referential-entities/77645/3 "2006-11-29T17:21:46Z")

</div>

Check out Josh S.'s blog post on _Self-referential has\_many :through  
associations_:  
[http://blog.hasmanythrough.com/articles/2006/04/21/self-referential-through](http://blog.hasmanythrough.com/articles/2006/04/21/self-referential-through)

---

<div class="post-metadata">

**Author:** ![lkfken](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/7bcc69/32.png) [@lkfken](https://www.ruby-forum.com/u/lkfken)\
**Post date:** [November 30, 2006, 6:30am UTC](https://www.ruby-forum.com/t/how-do-i-model-self-referential-entities/77645/4 "2006-11-30T06:30:46Z")

</div>

Thanks, this is exactly what I needed. Works great.

Ken

---

<div class="post-metadata">

**Author:** ![lkfken](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/7bcc69/32.png) [@lkfken](https://www.ruby-forum.com/u/lkfken)\
**Post date:** [November 30, 2006, 12:11am UTC](https://www.ruby-forum.com/t/how-do-i-model-self-referential-entities/77645/5 "2006-11-30T00:11:43Z")

</div>

Hi Thorsten -

I don’t think the acts\_as\_tree will work for me, because I am really  
dealing with a many-to-many self-referential relationship. A group can  
be a member of one or more groups, just as a user can be a member of one  
or more groups.

Ken
