Я строю социальную сеть, и я застрял в дружеских отношениях. Это мои данные:
Стол дружбы:
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.
Что я хочу получить в модели Пользователь :
- имеет много: questions_sent #, когда для подтверждения в модели Friendship установлено значение false, а я являюсь источником (user_id)
- имеет много: request_recovered #, когда для подтверждения в модели Friendship установлено значение false, а я являюсь целью (friend_id)
имеет много друзей: # когда для подтверждения в модели Friendship установлено значение true, а я либо источник (user_id), либо цель (friend_id)
Как вы можете заметить из кода, который я разместил, я попытался указать: условие => «подтверждено = ложь», но рельсы применяют условие к модели пользователя, а не к модели дружбы, так что это неправильный способ достижения мои 3 гола, с помощью бесплатного метода в модели User?
Tnx
P.S Я не хочу менять свои модели, я просто хотел бы найти решение для существующих