2012-08-08 40 views
6

Tôi đã có một truy vấn kỷ lục hoạt động mà tôi đang sử dụng group_byActive Record trật tự theo quy mô nhóm

@foo = Foo.group_by(&:relation) 

Sau đó, trong giao diện i đang sử dụng

@foo.each do |group, values| 
group x has values.count elements 
end 

Có cách nào tôi có thể sắp xếp chúng theo số lượng của mỗi nhóm?

Trả lời

7

group_by không phải là phương thức ActiveRecord, nhóm là. group_by là một phương thức liệt kê.

gì về

@foo = Foo.group('relation').order('count_id asc').count('id') 

Taken từ "Order by" result of "group by" count?.

Ngược lại, nếu bạn muốn sắp xếp nó vào trình độ Ruby, bạn có thể làm

disordered_hash = {:two=>[1, 2], :one=>[1], :three=>[1, 2, 3]} 
ordered_array = disordered_hash.sort {|k, v| k[1].count <=> v[1].count} # add .reverse if you want 
# => [[:one, [1]], [:two, [1, 2]], [:three, [1, 2, 3]]] 
+0

không xác định phương pháp 'trật tự' cho #

+0

gì xảy ra nếu bạn thay đổi group_by vào nhóm? Đã chỉnh sửa câu trả lời của tôi. – oldergod

+0

Điều đó sẽ hiệu quả, tôi sẽ đưa nó cho bạn. Mặc dù tôi tin rằng đó là làm nhóm của nó trên mức db, trong khi khác đã cho tôi những điều tôi có thể lặp lại trong ruby. –

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