Я загружаю данные из двух моделей, и как только данные загружаются в переменные, мне нужно удалить эти элементы из первого отношения, которые не находятся во втором.Как удалить некоторые элементы из отношения?
Образец:
users = User.all
articles = Articles.order('created_at DESC').limit(100)
У меня есть эти две переменные, заполненные с реляционными данными. Теперь мне нужно будет удалить из articles
все предметы, где значение user_id
не включено в объект users
. Таким образом, в articles
остались бы только предметы с user_id
, то есть в переменной users
.
Я пробовал его с петлей, но это было очень медленно. Как это сделать эффективно?
EDIT:
Я знаю, что есть способ избежать этого путем лучшего запроса, но в моем случае, я не могу этого сделать (хотя я согласен, что в приведенном выше примере это можно сделать). Дело в том, что у меня есть в двух переменных, загружаемых из базы данных, и мне нужно будет обрабатывать их с помощью Ruby. Есть ли команда для этого? Спасибо
Благодаря @JoshBodah, я знаю, что есть способ постройте лучший запрос, но у меня уже есть данные в переменных и их необходимо обработать (я обновляю OP). – user984621
Я предполагаю, что проблема заключается в том, что наивное решение только перебора коллекции и проверка '.include? 'Слишком медленная из-за размера' users'. Некоторые другие параметры, которые у вас есть, - это: 1) сортировать 'User.all' с помощью' id' и использовать двоичный поиск (Array # bsearch); 2) использовать Sets для поиска пересечения; 3) итерации при вставке в Hash для memoize вашей работы между итерациями (например, перебирать статьи и проверять, если user_id в hash еще ищет пользователей при кэшировании каждого в хэше). Бинарный подход к поиску в порядке (Set тоже может быть в порядке), но способ Hash может быть медленным. –