# Has\_many and HABTM in one model

**URL:** <https://www.ruby-forum.com/t/has-many-and-habtm-in-one-model/109172>\
**Category:** Rails\
**Created:** [July 12, 2007, 4:06am UTC](https://www.ruby-forum.com/t/has-many-and-habtm-in-one-model/109172 "2007-07-12T04:06:12Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [July 12, 2007, 4:06am UTC](https://www.ruby-forum.com/t/has-many-and-habtm-in-one-model/109172/1 "2007-07-12T04:06:12Z")

</div>

Hello,

If i have a has\_many and an HABTM relationship what is the best way to  
manage this? I.E.,

## user

id  
username  
has\_many :books

## books

id  
user\_id  
bookname  
belongs\_to :user

Now what I also want is people to be able to share books with each  
other. So  
i have shared\_books table , with user\_id, book\_id which to me is an  
HABTM  
relationship. How do I have both associations co-exist in the model ?

Adam

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [July 12, 2007, 4:47am UTC](https://www.ruby-forum.com/t/has-many-and-habtm-in-one-model/109172/2 "2007-07-12T04:47:14Z")

</div>

use something like the following (untested)

user.rb

# each user can share a number of books

has\_and\_belongs\_to\_many :shared\_books, :join\_table =\> ‘shared\_books’,  
:class\_name =\> ‘book’

book.rb

# a book can belong to many users

has\_and\_belongs\_to\_many :shared\_users, :join\_table =\> ‘shared\_books’,  
:class\_name =\> ‘user’

Mike

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [July 12, 2007, 9:47pm UTC](https://www.ruby-forum.com/t/has-many-and-habtm-in-one-model/109172/3 "2007-07-12T21:47:13Z")

</div>

thanks I will try this. I wasnt sure if you can do

has\_many :books  
has\_and\_belongs\_to\_many :shared\_books, :join\_table =\> ‘shared\_books’,  
:class\_name =\> ‘book’

in the same model.

Adam

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [July 13, 2007, 2:40am UTC](https://www.ruby-forum.com/t/has-many-and-habtm-in-one-model/109172/4 "2007-07-13T02:40:48Z")

</div>

unfortunately this didnt work… i had this in my User model

has\_many :books  
has\_and\_belongs\_to\_many :shared\_books, :join\_table =\> ‘shared\_books’,  
:class\_name =\> :book

and this in the book model

belongs\_to :user  
has\_and\_belongs\_to\_many :shared\_books, :join\_table =\> ‘shared\_books’,  
:class\_name =\> :user

TypeError: can’t convert Symbol into String  
from  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active\_record/base.rb:1087:in  
`type_name_with_module' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1356:in`compute\_type’  
from  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active\_record/reflection.rb:125:in  
`klass' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/associations/has_and_belongs_to_many_association.rb:158:in`construct\_sql’  
from  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active\_record/associations/has\_and\_belongs\_to\_many\_association.rb:6:in  
`initialize' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/associations.rb:934:in`shared\_books’  
from (irb):2

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [July 13, 2007, 12:32pm UTC](https://www.ruby-forum.com/t/has-many-and-habtm-in-one-model/109172/5 "2007-07-13T12:32:42Z")

</div>

Change :class\_name =\> :book to :class\_name =\> ‘book’

Khurram Ijaz  
[http://www.renai-soft.com](http://www.renai-soft.com)

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [July 13, 2007, 1:44pm UTC](https://www.ruby-forum.com/t/has-many-and-habtm-in-one-model/109172/6 "2007-07-13T13:44:04Z")

</div>

— :class\_name =\> “Book”, I think.

Khurram Ijaz wrote:

> Change :class\_name =\> :book to :class\_name =\> ‘book’
> 
> Khurram Ijaz  
> [http://www.renai-soft.com](http://www.renai-soft.com)
