Anda melakukan dua hal:
- Filter pengguna dengan kueri db alih-alih memfilter dalam aplikasi
-
hanya mengambil bidang yang Anda butuhkan dari db, daripada seluruh objek pengguna (dengan asumsi Anda memiliki beberapa hal lain di pengguna, yang Anda hilangkan di sini untuk singkatnya)
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:Mungkin Anda tidak ingin menggunakan map di User.all , itu akan membutuhkan banyak memori jika Anda memiliki banyak dokumen pengguna yang berat. Selain itu, Anda tidak menggunakan pengguna yang dipetakan, tetapi mengumpulkan hasil di competitors susun sendiri, jadi each seharusnya berfungsi dengan baik.