Fai due cose:
- Filtra gli utenti con query db invece di filtrare nell'applicazione
-
recupera solo i campi di cui hai bisogno da db, piuttosto che l'intero oggetto utente (supponendo che tu abbia altre cose in user, che hai omesso qui per brevità)
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
PS:Probabilmente non vuoi usare map
su User.all
, richiederà molta memoria se hai molti documenti utente pesanti. Inoltre, non stai utilizzando gli utenti mappati, ma stai invece raccogliendo risultati nei competitors
ordinate voi stessi, quindi each
dovrebbe funzionare bene.