1

アルゴリズムを使用してリンクを並べ替えると、必要な情報はすべてLinksテーブルの値から取得できます。アイテムの計算で並べ替えられたアイテムを返すにはどうすればいいですか?Scoreアルゴリズムによる並べ替え

スキーマhttps://gist.github.com/1326044

indexアクションhttps://gist.github.com/1326045

時間の計算https://gist.github.com/1326050

アルゴリズム

# Score = (P-1)/(T+2)^G 
    # P = points of an item (and -1 is to negate submitters vote) 
    # T = time since submission (in hours) 
    # G = Gravity, defaults to 1.8 
+1

? –

+0

私はまだ初心者ですが、データベースレベルで何を意味するのか分かりません。 postgresqlを使用しているherokuでプロダクションコードがホストされているので、カスタムSQLの使用を避けたいですか? – Dru

+0

これまでに何があったのですか? – tokland

答えて

2
次のように私は思い

まず、あなたのモデルで:

お使いのコントローラで
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) 
+0

私はafter_initializeを理解するためのドキュメントを探していましたが、テーブルから取り出す前にスコアを再計算しますか? – Dru

+0

これは、データベースからオブジェクトを取得するたびにスコアを計算するため、リフレッシュされます。 – apneadiving

+0

@Dru - [Active Record Callbacksのドキュメント](http://api.rubyonrails.org/classes/ActiveRecord/Callbacks。 html)少し助けるかもしれません。簡単に言えば、 'find'でレコードを見つけたり、新しいオブジェクトを作成したりすると、そのオブジェクトの' after_initialize'コールバックがトリガーされます。 – colinm

関連する問題