Проблема дружбы - PullRequest
       7

Проблема дружбы

0 голосов
/ 22 января 2011

Я строю социальную сеть, и я застрял в дружеских отношениях. Это мои данные:
Стол дружбы:

 create_table "friendships", :force => true do |t|
t.integer  "user_id"
t.integer  "friend_id"
t.boolean  "confirmed"
t.datetime "created_at"
t.datetime "updated_at"

Ассоциация в дружбе, модель:

   class Friendship < ActiveRecord::Base
  belongs_to :user
  belongs_to :friend, :class_name => "User"

Мой Ошибка Ассоциация в пользовательской модели:

  has_many :friendships #table that contains the reference of friends
  has_many :friends, :through=>:friendships, :conditions => ['confirmed = false'] #my performed request to others friends
  has_many :inverse_friendship, :class_name=>"Friendship", :foreign_key=>"friend_id" #someone requested friendship to me
  has_many :inverse_friends, :through=>:inverse_friendship, :source=>:user

Логическое значение, подтвержденное в таблице «дружба», означает, что если запросы принимаются обоими друзьями, то при отправке запроса о дружбе это значение по умолчанию равно false. Что я хочу получить в модели Пользователь :

  1. имеет много: questions_sent #, когда для подтверждения в модели Friendship установлено значение false, а я являюсь источником (user_id)
  2. имеет много: request_recovered #, когда для подтверждения в модели Friendship установлено значение false, а я являюсь целью (friend_id)
  3. имеет много друзей: # когда для подтверждения в модели Friendship установлено значение true, а я либо источник (user_id), либо цель (friend_id)

    Как вы можете заметить из кода, который я разместил, я попытался указать: условие => «подтверждено = ложь», но рельсы применяют условие к модели пользователя, а не к модели дружбы, так что это неправильный способ достижения мои 3 гола, с помощью бесплатного метода в модели User? Tnx

P.S Я не хочу менять свои модели, я просто хотел бы найти решение для существующих

1 Ответ

2 голосов
/ 22 января 2011

Можно добавить условие в модель дружбы как named_scope, тогда вы сможете сделать что-то вроде:

@user.friends.confirmed

...