2010-01-07 36 views
37

Tôi biết tôi đã nhìn thấy điều này trước nhưng tôi không thể tìm thấy bất cứ điều gì bây giờ. Tôi muốn nhóm một truy vấn theo một cột nhất định và có thể hiển thị số lượng trong mỗi nhóm. Tôi đã nhận phần đầu tiên xuống:Nhóm và đếm trong Rails

@line_items = @project.line_items.all(:group => "device_id") 

Đây là chế độ xem chỉ mục chi tiết đơn hàng, chỉ là bảng hiển thị chi tiết đơn hàng. Làm cách nào để tôi tạo cột trong bảng đó để "đếm" bây giờ các chi tiết đơn hàng được nhóm theo thiết bị?

Trả lời

75

Bạn có thể làm count trên line_items sẽ trả lại cho bạn số băm được đặt hàng là device_idcount.

@project.line_items.group(:device_id).count 
+1

Điều này đưa ra cảnh báo: 'CẢNH BÁO KHÔNG DÙNG: Quan hệ # tính toán với các tùy chọn công cụ tìm không được chấp nhận. Hãy xây dựng một phạm vi và sau đó gọi tính toán trên nó thay thế. (được gọi từ C: trong 'count' :) ' – Chloe

+6

@Chloe - Hãy thử điều này trong Rails 4 để loại bỏ cảnh báo:' @ project.line_items.group (: device_id) .count' –

8

Chỉ cần thêm một lựa chọn :select:

@line_items = @project.line_items.all(
    :group => "device_id", 
    :select => "device_id, COUNT(*) as count" 
) 

Sau đó, mỗi @line_item sẽ có một thuộc tính count.

+0

HRM, tôi đặt debug (@line_items) theo quan điểm của tôi, nhưng tôi không thấy bất kỳ số lượng, vì vậy tôi don' Tôi nghĩ rằng tôi hiểu bạn. Tôi nghĩ đầu ra chính xác giống như không có tùy chọn chọn. – tladuke

+0

điều này thực sự hoạt động, nhưng không phải nếu bạn có một: bao gồm – tladuke

+0

Phương pháp gỡ lỗi sẽ không hiển thị số vì nó không phải là một thuộc tính ActiveRecord, nhưng có * là * một thuộc tính đếm trên mỗi đối tượng. Trong mọi trường hợp, giải pháp của Chandra tốt hơn nhiều. –

10

hash của devise_id như chìa khóa và các hồ sơ liên quan đến đếm

@project.line_items.group(:devise_id).count 
3

cái gì đó như

User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id") 

cũng có thể làm việc ...

0

Đối với chỉ đếm nhổ sẽ nhanh hơn ở đây chứ không phải là nhóm

@project.line_items.pluck(:device_id).count 


@project.line_items.pluck(:device_id).uniq.count 
+0

Chúng sẽ trả lại các kết quả hoàn toàn khác nhau cho các thuộc tính liệt kê . Ví dụ: 'customer_subscriptions.group (: status) .count' sẽ trả về: ' {1 => 6, 2 => 11, 3 => 136, 0 => 30} ' và' customer_subscriptions. pluck (: status) .count' sẽ trả về '183' – msdundar

+0

đúng, còn uniq thì sao? @ project.line_items.pluck (: device_id) .uniq.count –

0

Tôi nghĩ rằng bạn có thể thử này cũng.

@project.line_items.group(:device_id).pluck("device_id, count(device_id)") 

^^ này cho mảng của mảng với 'DEVICE_ID và đếm' yếu tố

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