Como faço relacionamentos reflexivos de auto-associação no ActiveRecord?
Eu estou tentando implementar um modelo de amizade estilo de rede social e eu não tive muita sorte tentando descobrir os plugins disponíveis lá fora. Eu acho que vou aprender Rails melhor se eu fizer isso sozinho. Então aqui está o que eu tenho:
<code>class User < ActiveRecord::Base has_many :invitee_friendships , :foreign_key => :friend_id, :class_name => 'Friendship' has_many :inviter_friends, :through => :invitee_friendships has_many :inviter_friendships , :foreign_key => :user_id, :class_name => 'Friendship' has_many :invited_friends, :through => :inviter_friendships end class Friendship < ActiveRecord::Base belongs_to :user //I think something needs to come here, i dont know what end </code>
Emirb
quando eu tento isso:
<code>friend1 = Friend.create(:name => 'Jack') friend2 = Friend.create(:name => 'John') bff = Friendship.create(:user_id =>1, :friend_id => 2) f1.invited_friends </code>
Eu recebo um erro:
<code>ActiveRecord::HasManyThroughSourceAssociationNotFoundError: Could not find the source association(s) :invited_friend or :invited_friends in model Friendship. Try 'has_many :invited_friends, :through => :invited_friendships, :source => <name>'. Is it one of :user? </code>
Expansão do sistema de amizade:
Um usuário pode convidar outros usuários para se tornarem amigos.Os usuários que você convidou para se tornar amigos são representados porinvited_friends
.Os usuários que convidaram você para se tornar amigos são representados porinviter_friends
.Sua lista total de amigos é representada porinvited_friends
+ inviter_friends
.Esquema
<code>table Friendship t.integer :user_id t.integer :friend_id t.boolean :invite_accepted t.timestamps table User t.string :name t.string :description </code>