Я бы сделал следующее:
Сначала в вашей модели:
after_initialize :calculate_score
attr_accessor :score
def calculate_score
unless self.new_record?
time_elapsed = (Time.zone.now - self.created_at) / 3600
self.score = (self.points-1) / (time_elapsed+2)^G # I don't know how you retrieve G
end
end
В вашем контроллере:
@links = Link.all.sort_by(&:score)