私たちのアプリでは、人々は1つまたは複数のプロジェクトを持っています。これらのプロジェクトには開始日と終了日があります。利用できる日数には限りがあります。
これで、特定の人の空き状況を週ごとに表示するページができました。現在18週間を示しています。
現在、特定の週の利用可能時間を計算する方法は次のとおりです。
def days_available(query_date=Date.today)
days_engaged = projects.current.where("start_date < ? AND finish_date > ?", query_date, query_date).sum(:days_on_project)
available = days_total - hours_engaged
end
これは、アプリの上に記述されているページを表示すると、データベースに対して18(!)クエリが実行されることを意味します。テーブル内の複数の人の空き状況を一覧表示するページがあります。これらのページでは、クエリの量はすぐに驚異的になります。
また、かなり遅いです。
可用性の取得をよりパフォーマンスの高い方法で処理するにはどうすればよいでしょうか。