2012-03-16 35 views
8

Người dùng has_many Giải phápLàm thế nào để có được số lượng cao nhất của mô hình liên kết (Rails)?

Làm cách nào để đặt hàng Người dùng bởi những người có nhiều Giải pháp nhất?

Tôi đang cố gắng tìm mười người dùng hàng đầu nhưng tôi không chắc chắn cách thức gọn gàng nhất hoặc hiệu quả để thực hiện việc này?

Có ai có ví dụ không quá đắt tính toán không?

Trả lời

4

Nếu bạn thực sự muốn có một cách nhanh chóng để làm việc đó, hãy đặt một counter_cache vào các giải pháp một người sử dụng (có một cột solutions_count trong User của bạn) và trật tự của cột đó. Bạn không cần phải quản lý truy cập đó, bởi vì đường ray làm điều đó cho bạn. Bạn có thể đọc thêm về counter_cache trong Rails Guides

18
User 
    .joins(:solutions) 
    .select("users.*, count(solutions.id) as scount") 
    .group("users.id") 
    .order("scount DESC") 
4

Giả sử các mô hình sau

class User 
    has_many :solutions 
end 

class Solution 
belongs_to :user 
end 

Sau đó, cách tốt nhất là để counter_cache các solutions_count và trật tự của nó. more on counter_cache

Truy vấn sau đó sẽ được

User.order("users.solutions_count DESC").limit(10) 

Đừng quên chỉ số cột solutions_count.

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