# Table relationship question

**URL:** <https://www.ruby-forum.com/t/table-relationship-question/125502>\
**Category:** Rails\
**Created:** [January 9, 2008, 6:49pm UTC](https://www.ruby-forum.com/t/table-relationship-question/125502 "2008-01-09T18:49:19Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![spokra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ba8739/32.png) [@spokra](https://www.ruby-forum.com/u/spokra)\
**Post date:** [January 9, 2008, 6:49pm UTC](https://www.ruby-forum.com/t/table-relationship-question/125502/1 "2008-01-09T18:49:19Z")

</div>

if I want to allow users to rate each other… would this be the way  
to do it?

rating model:

belongs\_to :users foriegn\_key=\>‘rated\_user\_id’  
belongs\_to :users foriegn\_key=\>‘rating\_user\_id’

user model:

has\_many :rating foriegn\_key=\>‘rated\_user\_id’  
has\_many :rating foriegn\_key=\>‘rating\_user\_id’

rating\_user table

int rating\_user\_id;  
int rated\_user\_id;

Ratings table

int rating;  
int rated\_user\_id;  
int rating\_user\_id;

---

<div class="post-metadata">

**Author:** ![spokra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ba8739/32.png) [@spokra](https://www.ruby-forum.com/u/spokra)\
**Post date:** [January 9, 2008, 9:03pm UTC](https://www.ruby-forum.com/t/table-relationship-question/125502/2 "2008-01-09T21:03:00Z")

</div>

No, I think you need something like this (and be sure to spell  
“foreign\_key” right ;):

Rating model:

belongs\_to :rating\_user, :class\_name =\> “User”, :foreign\_key =\>  
“rating\_user\_id”  
belongs\_to :rated\_user, :class\_name =\> “User”, :foreign\_key =\>  
“rated\_user\_id”

User model:

has\_many :received\_ratings, :class\_name =\> “Rating”, :foreign\_key =\>  
“rated\_user\_id”  
has\_many :given\_ratings, :class\_name =\> “Rating”, :foreign\_key =\>  
“rating\_user\_id”

I think you have an extra table… you shouldn’t need rating\_user.

---

<div class="post-metadata">

**Author:** ![spokra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ba8739/32.png) [@spokra](https://www.ruby-forum.com/u/spokra)\
**Post date:** [January 9, 2008, 8:17pm UTC](https://www.ruby-forum.com/t/table-relationship-question/125502/3 "2008-01-09T20:17:34Z")

</div>

On Jan 9, 9:48 am, spokra [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> has\_many :rating foriegn\_key=\>‘rated\_user\_id’  
> has\_many :rating foriegn\_key=\>‘rating\_user\_id’

Looks good to me, assuming one rating per user-user combination (i.e.,  
can’t rate the same guy twice and still save the old rating).

///ark
