Du gör två saker:
- Filtrera användarna med db-fråga istället för att filtrera i applikationen
-
hämta bara fält du behöver från db, snarare än hela användarobjekten (förutsatt att du har några andra saker i användaren, som du utelämnade här för korthetens skull)
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 vill förmodligen inte använda map
på User.all
, kommer det att kräva mycket minne om du har många tunga användardokument. Dessutom använder du inte de mappade användarna, utan samlar istället in resultat i competitors
arrangera dig själv, så each
borde fungera bra.