Как написать этот SQL в MetaWhere?
Как бы я написал этот запрос, используя MetaWhere (в Rails 3)?
SELECT "users".* FROM "users"
INNER JOIN "friendships" friends
ON "users"."id" = friends."friend_id"
INNER JOIN "friendships" inverse_friends
ON "users"."id" = inverse_friends."user_id"
WHERE friends."user_id" = 4
AND friends."status" = 't'
AND inverse_friends."friend_id" = 4
AND inverse_friends."status" = 't'
Я пытаюсь добавить метод на мойUser
класс называется buddies
это вернет оба friends
а также inverse_friends
из этого Railscast на само-ссылочной ассоциации.
Буду признателен за любую помощь!
РЕДАКТИРОВАТЬ: я хочу иметь возможность запросить на возвращенном наборе, так что я могу сделать:
def is_a_buddy_of?(user)
not self.buddies.where(:friend_id >> user.id).empty?
end
РЕШЕНИЕ: не важно, что последнее редактирование, я просто изменил мой is_a_buddy_of?(user)
метод к этому, используя |
оператор на моих существующих ассоциациях:
def is_a_buddy_of?(user)
status = false
self.buddies.map do |buddy|
status = true if buddy.id == user.id
end
status
end
1 ответ
Решение
Почему бы вам просто не сделать следующее в вашей модели User:
def buddies
inverse_friends | friends
end
|
является оператором объединения.