Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
@friends_out = Friendship.where(:user_id=> #users "i" want to be friends with
@friends_in = Friendship.where(:friend_id=> #users who want to be friend with "me"
# users who haven't added "my" id to Friendship and vice versa
# user who are my friend and i'm their friends.
Copy link

SteffanPerry commented May 12, 2011

Assuming you are using a SQL DB, you could do:

In your user model:

has_and_belongs_to_many :fields
has_and_belongs_to_many :friends, :class_name => "User",
:foreign_key => "other_user_id"

in your controller

@friends = UsersUser.where(:status=>friend && :user_id =>
@friends_out = UsersUser.where(:status=>pending && :other_user_id =>
@friends_in = UsersUser.where(:status=>pending && :user_id =>

So in this example if you wanted to be a friend with me, your id would be the other_user_id and mine would be user_id and the status could be set to pending, if I accept you could change the status to accepted or however you would like.

Also if @user is equal to the current logged in user, in your view you could just call @user.friends to get all of your friends regardless of status.

Copy link

jlebrech commented May 12, 2011

the UsersUser model you have there is similar to the Friendship model in

You way adds a status, so you just need to accept those who have added you.

I understand what you are doing now with status, is saves the cross referencial query.


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment