Как мне создать рефлексивные отношения самосоединения в ActiveRecord?

StackOverflow https://stackoverflow.com/questions/1034411

Вопрос

Я пытаюсь реализовать модель дружбы в стиле социальной сети, и мне не очень повезло, пытаясь разобраться с доступными там плагинами.Я думаю, что я лучше изучу Rails, если сделаю это сам.Итак, вот что у меня есть :

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

В irb когда я пытаюсь это:

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

Я получаю сообщение об ошибке:

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?

Расширение системы дружбы:

  • Пользователь может приглашать других пользователей стать друзьями.
  • Пользователи, которых вы пригласили стать друзьями, представлены invited_friends.
  • Пользователи, которые пригласили вас стать друзьями, представлены inviter_friends.
  • Ваш общий список друзей представлен invited_friends + inviter_friends.

Схема

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

table User
    t.string :name
    t.string :description
Это было полезно?

Решение

Я удивлен, что никто не указал на недавнее убийство Райана Бейтса скринкаст по теме :)

Надеюсь, это поможет!.

Отрывок из книги Райана "...требуется самореферентная ассоциация в пользовательской модели для определения друзей / подписчиков'

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top