Как написать этот SQL в Metawhere?
-
27-10-2019 - |
Вопрос
Как я бы напишет этот запрос, используя Metawhere (в рельсах 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
Решение
Почему бы вам просто не сделать следующее в своей пользовательской модели?:
def buddies
inverse_friends | friends
end
|
это профсоюзный оператор.
Не связан с StackOverflow