我正在构建一个赛车计时应用程序。当汽车在赛道上比赛时,用户将每个分段时间输入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
并将它们放入一个排序数组中,然后比较当前 Car 的 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,以我有限的理解和经验,我认为窗口函数可能会提供一个解决方案。还有其他方法吗?