pluck lấy thẳng cột từ DB và trả về mảng giá trị thuần, không dựng object Active Record.
ruby
User.pluck(:email) # SELECT "users"."email" FROM "users" => ["a@x.com", ...]
User.select(:email) # SELECT "users"."email" => Relation of User objects
User.all.map(&:email) # SELECT * FROM "users", then instantiate every rowmaptải toàn bộ cột và khởi tạo đầy đủ model cho mỗi dòng — tốn RAM nhất.selectvẫn dựng model nhưng chỉ nạp cột được chọn; chạm vào cột không select sẽ némActiveModel::MissingAttributeError.pluckkhông dựng model → nhanh và nhẹ nhất, nhưng cũng không chạy callback, không dùng được method của model.
Chọn: chỉ cần danh sách giá trị (id, email để gửi mail, mảng cho IN) → pluck. Cần gọi method trên record → select hoặc query bình thường. map trên all chỉ dùng khi tập dữ liệu nhỏ.