Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails - How to create a model linked to TWO of another model

I am trying to create the following:

User model (this is fine)

id

Link model (associated with two Users)

id
user_id1
user_id2

Is this an instance in which I would want to use the has_and_belongs_to_many association type on the Link model? How should I do this?

Ultimately, I would like to be able to have a user object and call @user.links to get all links involving that user...

I'm just not sure what the best way to do this in Rails is.

like image 268
cakeforcerberus Avatar asked Jun 22 '09 13:06

cakeforcerberus


2 Answers

You will very likely want two models structured as follows:

class User < ActiveRecord::Base
  has_many :friendships
  has_many :friends, :through => :friendships #...
end

class Friendship < ActiveRecord::Base
  belongs_to :user
  belongs_to :friend, :class_name => 'User', :foreign_key => 'friend_id'
end 

# ...and hence something like this in your view
<% for friendship in @user.friendships %>
  <%= friendship.status %>
  <%= friendship.friend.firstname %>
<% end %>

(This pattern is from a post made by Ryan Bates about two years ago during this discussion on RailsForum.)


Just a note: this is now quite old. You may want to consider evaluating other strategies for handling this in a modern Rails context.

like image 82
Joseph Weissman Avatar answered Nov 14 '22 03:11

Joseph Weissman


You can create A Join Model that relation between the Link between the two users models

so basically


class User

  has_many :links, :through => :relationships

end

class Relationship

  belongs_to :user_id_1, :class=> "User"
  belongs_to :user_id_2, :class=> "User"

end

like image 24
Rishav Rastogi Avatar answered Nov 14 '22 04:11

Rishav Rastogi