Haces dos cosas:
- Filtrar a los usuarios con consulta de base de datos en lugar de filtrar en la aplicación
-
solo obtenga los campos que necesita de db, en lugar de todos los objetos del usuario (suponiendo que tenga otras cosas en el usuario, que omitió aquí por brevedad)
Competitor = Struct.new(:html_url, :description, :user) competitors = [] User.where('watchlists.tags_array' => %w[ruby web framework]). only(:nickname, :watchlists).each do |u| u.watchlists.where(:tags_array => %w[ruby web framework]).each do |wl| competitors << Competitor.new(wl.html_url, wl.description, u.nickname) end end
PD:Probablemente no quieras usar map
en User.all
, requerirá mucha memoria si tiene muchos documentos de usuario pesados. Además, no está utilizando los usuarios mapeados, sino recopilando resultados en los competitors
matriz usted mismo, por lo que each
debería funcionar bien.