Sie tun zwei Dinge:
- Filtern Sie die Benutzer mit der DB-Abfrage, anstatt in der Anwendung zu filtern
-
Holen Sie nur die Felder, die Sie benötigen, aus der Datenbank, und nicht die gesamten Benutzerobjekte (vorausgesetzt, Sie haben noch andere Dinge in user, die Sie hier der Kürze halber weggelassen haben)
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:Wahrscheinlich möchten Sie map
nicht verwenden auf User.all
, wird viel Speicher benötigt, wenn Sie viele umfangreiche Benutzerdokumente haben. Außerdem verwenden Sie nicht die zugeordneten Benutzer, sondern sammeln stattdessen Ergebnisse bei den competitors
selbst anordnen, also each
sollte gut funktionieren.