Создание запроса на предложение дружбы, охватывающего 3 модели - PullRequest
0 голосов
/ 21 декабря 2011

Я мог бы использовать справку по следующему запросу, который предназначен для предложения друзей пользователю

У меня есть три модели:

User (id, fb_id, org_id)
FbFriends (user_id, fb_id, org_id)
Friendships (user_id, friend_id)

FbFriends кэширует друзей пользователя в Facebook.Friendship - это дружба в моем приложении.

Цель, возврат пользователей на основании следующих условий:

  1. Сортировка по идентификатору пользователя org_id
  2. Отфильтруйте кого угодно, если это уже запись Дружбы между двумя пользователями.

Можно ли вернуть @users на основании вышеизложенного одним запросом?Или мне нужно построить это с несколькими запросами?

Спасибо

1 Ответ

1 голос
/ 21 декабря 2011

В SQL вы бы сделали это так:

SELECT * FROM users
JOIN friendships friendships_l ON users.id = friendships.user_id
JOIN friendships friendships_r ON users.id = friendships.friend_id 
WHERE {{some_user_id}} <> users.id
  AND {{some_user_id}} <> friendships_l.friend_id,
  AND {{some_user_id}} <> friendships_r.user_id
ORDER BY users.org_id

В ActiveRecord:

User.
  joins('JOIN friendships friendships_l ON users.id = friendships_l.user_id').
  joins('JOIN friendships friendships_r ON users.id = friendships_r.friend_id').
  where(%[ :uid <> users.id AND
           :uid <> friendships_l.friend_id AND
           :uid <> friendships_r.user_id
         ],
         { :uid => some_user.id }
  ).
  order('users.org_id').all
...