2011-10-29 32 views
14

Hãy giúp tôi. Tôi có một số mô hình liên kết has_many với mô hình khác. Ví dụ: Hồ sơ => has_many: thống kê Và bên trong của mô hình thống kê tôi có một số phạm vi:Rails 3 ActiveRecord mong muốn tải phạm vi

scope last_ten, limit(10).order('online desc') 

Và câu hỏi là làm thế nào tôi có thể sử dụng tải háo hức cho phạm vi này? Tôi không cần mọi hồ sơ thống kê cho hồ sơ. Chỉ có phạm vi.

Bây giờ tôi có thể sử dụng chỉ

User.profiles.includes(:statistics) 

Cảm ơn.

Trả lời

19

Như đã giải thích ở đây: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Nó tốt hơn để xác định một mối quan hệ tùy chỉnh:

class Profile < ActiveRecord::Base 
    has_many :most_recent_stats, :class_name => 'Statistic', :order => 'online DESC', :limit => 10 
    ... 
end 

User.profiles.includes(:most_recent_stats) 
+0

Trong trường hợp trên tất cả thống kê thuộc về hồ sơ sẽ được nạp. Trong giới hạn tải mong muốn sẽ bị hủy theo tài liệu http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html – nkm

+0

yep, độ chính xác tốt, thực sự đó là liên kết tôi cung cấp – apneadiving

+7

Và không có cách nào để tải chỉ những hồ sơ cần thiết? Có vẻ như tôi sẽ luôn có vấn đề n + 1 hoặc tải tất cả các đối tượng vào bộ nhớ? Và điều gì sẽ xảy ra nếu tôi có hơn hàng ngàn hồ sơ? Tôi có thể làm gì ?! – ValeriiVasin

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