Question

J'essaie d'implémenter un modèle d'amitié de type réseautage social et je n'ai pas eu beaucoup de chance d'essayer de trouver les plugins disponibles. Je pense que je vais mieux apprendre Rails si je le fais moi-même. Alors voici ce que j'ai:

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

Dans irb quand j'essaie ceci:

friend1  = Friend.create(:name => 'Jack')
friend2  = Friend.create(:name => 'John')
bff = Friendship.create(:user_id =>1, :friend_id => 2)
f1.invited_friends

Je reçois une erreur:

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?

Expanation du système d'amitié:

  • Un utilisateur peut inviter d'autres utilisateurs à devenir amis.
  • Les utilisateurs que vous avez invités à devenir amis sont représentés par guest_friends .
  • Les utilisateurs qui vous ont invité à devenir amis sont représentés par inviter_friends .
  • Votre liste d'amis totale est représentée par amis_invités + amis_inviter .

Schéma

table Friendship
      t.integer :user_id
      t.integer :friend_id
      t.boolean :invite_accepted
      t.timestamps

table User
    t.string :name
    t.string :description
Était-ce utile?

La solution

Je suis surpris que personne n'ait signalé le récent screencast de Ryan Bates sur le sujet :)

J'espère que ça aide!

Extrait de Ryan '... nécessite une association auto-référentielle sur le modèle utilisateur pour définir les amis / suiveurs'

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top