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

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

<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>

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

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

Я получаю ошибку:

<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>

Expanation of friendship system:

A user can invite other users to become friends. Users who you invited to become friends are represented by invited_friends. Users who invited you to become friends are represented by inviter_friends. Your total friend list is represented by invited_friends + inviter_friends.

Schema

<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>
 udit23 июн. 2009 г., 20:56
только что добавил ошибку
 Ben Hughes23 июн. 2009 г., 20:50
Какая у вас ошибка?
 Larry K23 июн. 2009 г., 21:09
Просьба предоставить полную схему. Плагин для граблей Annotate Models -pragdave.pragprog.com/pragdave/2006/02/annotate_models.html а такжеagilewebdevelopment.com/plugins/annotate_models - очень полезно для этого. Он документирует модели & apos; схемы в виде комментариев в файлах модели.

Ответы на вопрос(1)

Решение Вопроса

скринкаст по теме :)

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

Отрывок из «Райана» ... требует самообращения к модели «Пользователь» для определения друзей / подписчиков ».

 udit24 июн. 2009 г., 03:22
Спасибо, это видео было именно то, что мне было нужно.

Ваш ответ на вопрос