2013-06-14 38 views
24

Tôi đang tìm một cách dễ dàng/nhanh chóng để nhận được một mảng các id từ một mối quan hệ Active Record.Rails Active Record - Nhận mảng id từ mối quan hệ

Hiện nay tôi có:

product_ids = Product.select(:id).where(:colour => 'blue').all.map{|p|p.id} 

Nhưng đó là lộn xộn và đòi hỏi một bản đồ ..

Something như thế này sẽ là mát:

product_ids = Product.where(:colour => 'blue').ids 

Bất kỳ ý tưởng?

Cảm ơn :)

+4

Pluck là giải pháp tốt nhất ở đây nhưng cũng giống như một btw: thay vì 'map {| p | p.id} 'bạn có thể viết' map (&: id) '. Điều này đúng cho tất cả các điều tra viên ('each',' any? ',' Select', 'reject', vv), và sẽ gọi biểu tượng trên mỗi đối tượng mà nó lặp lại. – jokklan

+0

ồ vâng, tôi biết về 'map (&: id)' chỉ có một sự trống rỗng khi viết bài này: P – complistic

+0

Đủ công bằng: P! Nhưng dù sao thì cũng tốt khi biết những người dùng khác đọc câu hỏi này :) – jokklan

Trả lời

52

Một chút giải pháp gọn gàng hơn:

Product.where(:colour => 'blue').pluck(:id) 
+0

Cảm ơn, điều đó rất tuyệt! Tôi không tìm thấy nó trước đây vì nó nằm trong Tính toán trong tài liệu .. http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html – complistic

7

Để xây dựng dựa trên các câu trả lời trước, nếu bạn đang làm việc thông qua một hiệp hội, bạn chỉ có thể nối thêm _ids vào truy vấn.

Vì vậy, trong ví dụ của bạn, nếu một Supplierhas_manyProducts, sau đó:

supplier.product_ids 

sẽ trở lại mảng lại id sản phẩm thuộc về nhà cung cấp.

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