2011-06-19 21 views
3

私はRuby on Rails 3.0.7を使用しています。パフォーマンス上の理由から、クラスオブジェクトの取得時に関連オブジェクトを読み込まないようにしたいと思います。つまり、Articleクラス\ modelのhas_many :usersステートメントを持っていれば、Articleオブジェクトを取得すると、関連付けられたUserオブジェクトをロードしません(この動作はRuby on Railsの "Convention over Configuration"の原則に依存します)。関連付けられた関係オブジェクトの読み込みを避ける

どうすればいいですか?

答えて

4

Rails(ActiveRecord)は、Yet Another Geekによると、デフォルトでリレーションシップオブジェクトをロードしません。むしろ、あなたがそれらを求めるときに行くとそれらを取得します。その関係のオブジェクトを必要としない場合、それらをロードすることは決してありません。データベースの時間を節約します。

必要な場合は、(デフォルトで)遅延検索を行います。関係のオブジェクトのすべて(または多く)が必要であることが分かっている場合(x-to-manyを仮定)、findには:include修飾子を使用してすべてを前面に表示することができます1回のdb呼び出しでこれを行うことができるからです)。熱心に関係オブジェクトを読み込む機能を知り、それを利用することは重要なことです。

@person = Person.find(params[:id], :include => :friends) 

すべてのことが言われているが、あなたは(あなたがそれらを必要としない場合は、オブジェクトをロードしない)したい動作がデフォルトの動作であり、あなたはすべてのセットでなければなりません。答えの残りの部分は、あなたに後で役に立つかもしれないちょっとした文脈でした。

2

これは、wikiの記事では、デフォルトでは読み込みが遅延しています。あなたが熱心に読み込まれるようにするには:users関係を含める必要があります。

関連する問題