概要
Product.unchecked_no_replied_productsスコープのN+1問題とメモリ効率の問題を解決し、rails-patterns gemのQueryオブジェクトにリファクタリングしてください。
QueryObjectパターンについて
rails-patterns gemのQueryオブジェクトの詳細については、以下のwikiを参照してください:
https://github.com/fjordllc/bootcamp/wiki/QueryObject
既存の実装例としてapp/queries/completed_learnings_query.rbも参考にしてください。
現在の問題
- N+1問題:
filter内でproduct.comments.lastを呼び出してN+1問題が発生
- メモリ効率: 全レコードをRubyメモリに読み込んでからフィルタリング
- スケーラビリティ: データ量の増加でパフォーマンスが大幅に悪化
- データベース最適化の機会損失: データベースレベルで処理可能なロジックをRuby側で実行
対象となるメソッド
Product.unchecked_no_replied_products (app/models/product.rb:58-65)
期待する成果
app/queries/product_unchecked_no_replied_query.rbの作成
- N+1問題の完全な解消
実装上の注意点
Patterns::QueryはActiveRecord::Relationを返すことが前提です
- データベースレベルでのクエリー最適化を重視してください
- 既存の動作は変更しないでください
- パフォーマンスが劣化しないよう注意してください
パフォーマンス要件
確認項目
概要
Product.unchecked_no_replied_productsスコープのN+1問題とメモリ効率の問題を解決し、rails-patterns gemのQueryオブジェクトにリファクタリングしてください。QueryObjectパターンについて
rails-patterns gemのQueryオブジェクトの詳細については、以下のwikiを参照してください:
https://github.com/fjordllc/bootcamp/wiki/QueryObject
既存の実装例として
app/queries/completed_learnings_query.rbも参考にしてください。現在の問題
filter内でproduct.comments.lastを呼び出してN+1問題が発生対象となるメソッド
Product.unchecked_no_replied_products(app/models/product.rb:58-65)期待する成果
app/queries/product_unchecked_no_replied_query.rbの作成実装上の注意点
Patterns::QueryはActiveRecord::Relationを返すことが前提ですパフォーマンス要件
確認項目