0

私はモータースポーツのタイミングアプリを構築しています。車がトラックを周回するとき、ユーザーはそれぞれのスプリットタイムをCarアプリに入力します。次に、アプリは各分割で各車をランク付けし、これをビューに表示します。

たとえば、車 A の split_1 は 5.00 秒、split_2 は 15.00 秒、split_3 は 25.00 秒です。車 B の split_1 は 5.50 秒、split_2 は 14.00 秒、split_3 は 23.00 秒です。車 A のビューに表示されるランクは 1、2、2 です。車 B は 2、1、1 です。

分割ごとにランクを計算するために、非効率的でデータベースを集中的に使用する方法を作成しました。基本的に、メソッドは上のすべての車のすべての split_1 時間を取得し、Timesheetそれらを並べ替えられた配列に配置してから、現在の車の split_1 を比較してその位置を見つけます。これをすべての車、すべてのラップで行います。悪夢です。

class Car < ActiveRecord::Base
     has_many :laps
end

class Lap < ActiveRecord::Base
     belongs_to :car
     belongs_to :timesheet
end

class Timesheet < ActiveRecord::Base
     has_many :laps
end

各ランクを計算するためのより簡単で効率的な方法が欠けていることはわかっています。私はPostgres 9.2を使用していますが、理解と経験が限られているため、ウィンドウ関数が解決策を提供すると思います。別の方法はありますか?

4

1 に答える 1