2012-08-29 26 views

Trả lời

179

pluck ở cấp db. Nó sẽ chỉ truy vấn trường cụ thể. See this.

Khi bạn làm:

User.first.gifts.collect(&:id) 

Bạn có các đối tượng với tất cả các lĩnh vực nạp và bạn chỉ nhận được id nhờ vào phương pháp dựa trên Enumerable.

Vì vậy:

  • nếu bạn chỉ cần id với Rails 4, sử dụng ids: User.first.gifts.ids

  • nếu bạn chỉ cần một số lĩnh vực với Rails 4, sử dụng pluck: User.first.gifts.pluck(:id, :name, ...)

  • nếu bạn chỉ cần một lĩnh vực với Rails 3, sử dụng pluck: User.first.gifts.pluck(:id)

  • nếu bạn cần tất cả lĩnh vực, sử dụng collect

  • nếu bạn cần một số lĩnh vực với Rails 4, vẫn sử dụng pluck

  • nếu bạn cần một số trường có Rails 3, hãy sử dụng selectcollect

+0

Tuyệt vời. Cảm ơn rất nhiều. –

+0

Tôi phải chấp nhận câu trả lời cùng một lúc.Stackoverflow đã cho tôi lỗi: Bạn có thể chấp nhận câu trả lời sau 9 phút :) –

+0

Tôi hiểu, không có vấn đề, chỉ cần một lời nhắc;) – apneadiving

20

Có. According to Rails guides, pluck trực tiếp chuyển đổi kết quả cơ sở dữ liệu thành một array, mà không cần xây dựng các đối tượng ActiveRecord. Điều này có nghĩa là hiệu suất tốt hơn cho truy vấn lớn hoặc thường chạy.

Ngoài câu trả lời @ apneadiving của, pluck có thể mất cả hai tên cột duy nhất và nhiều như là đối số:

Client.pluck(:id, :name) 
# SELECT clients.id, clients.name FROM clients 
# => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']] 
2

Sự khác biệt cơ bản và chính là nhổ áp dụng trên mức db và thu thập được tất cả dữ liệu và sau đó trở lại ghi lại cho bạn khi bạn cần tất cả hồ sơ sử dụng thu thập và khi vài trường sau đó sử dụng nhổ

Các vấn đề liên quan