2016-04-01 9 views
0

キャビネット作成者/インストーラ用に300以上のジョブを読み込むページがあります。ダラス、アーリントン、オーブリーの3つがある工場ごとに、1ページにすべてのアクティブジョブをロードします。各工場には、300〜400のアクティブ(スケジュールされた、アンインストールされたジョブ)があります。複数のSQLクエリをRailsアプリケーションで修正しようとしています

Dallasページを読み込むと、毎日やり直して、その日の順にジョブを出力します。照会は約50日間繰り返されます。私は何とかこの情報をキャッシュに送ることができるかどうかを知りたい。

ここ数日のように見えるものの絵は、私は2つのSUMヘッダーのクエリ、およびその特定の日のためのジョブをフィルタするために別のクエリ、すなわちを作る...毎日の

partial results pictured

です、ここで @jobs.where(calendar_date: '2016-04-06').each do

は、これらのページは4を取る正確なクエリ

# ALL jobs (in the controller) 
@jobs = Job.where(active: true, scheduled: true, 
       manufacturing_location: session[:factory]). 
       includes(:installer). 
       order('calendar_date asc') 

# Jobs for one day (in the view 
@jobs.where(calendar_date: day).order(:calendar_order).each do 

# The helper method for the 'daily tabulations' in the header 
    = daily_tabulation(@jobs.where(calendar_date: day)) 

    def daily_tabulation(jobs) 
    total_boxes = jobs.sum :number_of_cabinets 
    complete = jobs.where(complete_in_shop: true).sum :number_of_cabinets 
    to_build = total_boxes - complete 
    "To Build: #{to_build}, Complete: #{complete}, Total Boxes: #{total_boxes}" 
    end 

ですredis fragment cacheを使用していても、ブラウザにロードする時間は7秒です。これらの300以上のジョブはJSイベントハンドラを使用してスケジュール上のジョブやJSツールチップをドラッグアンドドロップできますが、これらのクリーンアップを行い、反応時間。ありがとうございました。

答えて

1

あなたはこのような場合には1つのコレクションで作業しているので、あなたは一度ごjobsをロードし、その後、配列のようにそれを処理することができます

@job_by_day = @jobs.select { |j| j.calendar_date == day } 

そしてEnumerable#sortの代わりAR#orderを使用しています。

関連する問題