Du gør to ting:
- Filtrer brugerne med db-forespørgsel i stedet for at filtrere i applikationen
-
hent kun felter, du har brug for fra db, i stedet for hele brugerobjekterne (forudsat at du har nogle andre ting i bruger, som du har udeladt her for kortheds skyld)
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:Du ønsker sandsynligvis ikke at bruge map
på User.all
, vil det kræve meget hukommelse, hvis du har mange tunge brugerdokumenter. Du bruger heller ikke de kortlagte brugere, men samler i stedet resultater i competitors
array dig selv, så each
burde fungere fint.