0

顧客へのレポートに使用され、新しいトランザクション データに依存しない、複雑なマルチオブジェクト クエリがあります。私が扱っているデータの量では、すべてのモデルをロードする代わりに、カスタム クエリを使用する方が効率的であるように思われます (最初はこれを行っていましたが、効果的なフィルタリングを使用しても遅くなりました)。

レポートを表すクラス (複数のモデルの属性を組み合わせたもの) を作成するところまで行きましたが、今はかなり簡単に思えることに行き詰まっています。

私はAttendeeReportという名前の新しいクラスを持っています

次の属性があります。

 attendee_id, first_name, last_name, email_address, rsvp_id, response_id, etc

これはレポートに使用され(jqueryデータテーブル、およびおそらく他の場所で)、このクエリを使用して、複数のモデルから正しい属性の配列に正しくプルしています。

list =  Attendee.joins(:event).joins(:focus_group_prospect).joins(:post_focus_group_survey).joins(:lead).joins(:vendor).where("events.focus_group_client_id = ?", client_id).select("attendees.id as attendee_id, leads.first_name, etc").all

配列内の各フィールドを使用せずに、その結​​果を AttendeeReport の新しい配列にどのようにマップしますか? これを動的に行う、よく知らないマージまたはマップ機能はありますか?

注: 表示される属性は重要ではないため、属性の数を大幅に減らしました。

更新:反射?

マップまたはマージを介してこれを行う簡単な方法がない場合は、これについて考え、リフレクション アプローチも機能するかどうかを考えます (すべての属性を反復して一致させる)。

4

0 に答える 0