2011-10-29 17 views
14

お願いします。 私は他のモデルとhas_manyの関係を持ついくつかのモデルを持っています。たとえば :プロファイル=>にhas_many:統計 そして、統計モデルの内側に私はいくつかの範囲を持っている:Rails 3 ActiveRecord eager loading of scope

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

をし、問題は、私はこのスコープの熱心な負荷を使用する方法ですか?私はプロフィールのすべての統計情報を必要としません。スコープのみ。

今、私は唯一の

User.profiles.includes(:statistics) 

感謝を使用することができます。

答えて

19

としては、ここで説明:

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

すべての統計情報がロードされますプロファイルに属している上記の場合:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

それはカスタム関係を定義する方が良いでしょう。熱心な積載制限は文書http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.htmlに従って廃棄されます。 – nkm

+0

確かに、正確な精度は、私が提供するリンクです – apneadiving

+7

そして、ロードする方法はありません必要なレコードのみ?私はいつもn + 1の問題を抱えているか、すべてのオブジェクトをメモリにロードするように見えますか?何千ものレコードを持っているとどうなりますか? どうすればいいですか? – ValeriiVasin

関連する問題