Я видел Railscast по самореференциальным отношениям здесь: http://railscasts.com/episodes/163-self-referential-association
Я основывался на этом в том смысле, что я включил поле «статус» о дружбе, чтобы дружбу нужно было запрашивать и принимать. 'status' - логическое значение - false для еще не ответившего, true для принятого.
Моя проблема в том, чтобы придумать метод для поиска объекта дружбы с учетом current_user (я использую Devise) и другого пользователя.
Вот что мне доступно:
current_user.friends # lists people you have friended
current_user.inverse_friends # lists people who have friended you
current_user.friendships # lists friendships you've created
current_user.inverse_friendships # lists friendships someone else has created with you
friendship.friend # returns friend in a friendship
Я ищу способ, подобный следующему, чтобы я мог легко проверить статус дружбы:
current_user.friendships.with(user2).status
Вот мой код:
user.rb
has_many :friendships
has_many :friends, :through => :friendships
has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id"
has_many :inverse_friends, :through => :inverse_friendships, :source => :user
friendship.rb
belongs_to :user
belongs_to :friend, :class_name => "User"
Пока я в этом - для отображения друзей пользователя мне нужно отобразить "current_user.friends" и "current_user.inverse_friends" - есть ли способ чтобы просто иметь возможность вызывать "current_user.friends" и быть ли это объединением двух?