Je doet twee dingen:
- Filter de gebruikers met db-query in plaats van filteren in applicatie
-
haal alleen velden op die je nodig hebt uit db, in plaats van de hele gebruikersobjecten (ervan uitgaande dat je wat andere dingen in de gebruiker hebt, die je hier voor de beknoptheid hebt weggelaten)
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:Waarschijnlijk wil je map
niet gebruiken op User.all
, het vereist veel geheugen als u veel documenten voor zware gebruikers hebt. U gebruikt ook niet de toegewezen gebruikers, maar verzamelt in plaats daarvan resultaten in de competitors
array zelf, dus each
zou prima moeten werken.