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.