Railsにオブジェクト全体(ほんの数フィールド)を構築させずに、ActiveRecordを介してDBからオブジェクトをフェッチする方法があるかどうか疑問に思っています。
たとえば、特定のオブジェクトに特定のフィールドが含まれているかどうかを確認する必要がある場合があります。Bagオブジェクトを参照するStudentオブジェクトがあるとします(各学生には1つのバッグがあります)。バッグに鉛筆が4本以上ある女子学生がいるかどうかを確認する必要があります。
ActiveRecordでは、次のようなことをする必要があります。
exists = Student.female.find(:all, conditions => 'bags.pencil_count > 4', :include => :bag).size > 0
問題は、この条件に準拠する学生が1000人いる場合、1000個のバッグを含む1000個のオブジェクトがARによって作成されることです。
これにより、(パフォーマンス上の理由から)このクエリにプレーンSQLを使用することになり、ARが壊れます。名前付きスコープは使用しません。名前付きスコープ内の何かが変更された場合は、コード全体でスコープを更新することを忘れないでください。
これは例ですが、パフォーマンス上の理由から、ARに多くのオブジェクトを構築させる代わりにSQLを使用する必要があり、これによりカプセル化が機能しなくなる場合が多くあります。
ARにオブジェクトを作成しないように指示する方法、または特定のフィールドを作成するように指示する方法はありますか(アソシエーションでも)?