リストの順序がリンクの賛成票の数と作成日の組み合わせに依存する Reddit タイプのアプリを作成しようとしています。私の計画は、「作成日」と「賛成票」を「ランク値」に組み合わせた「リンク」テーブルに新しい列を作成し、「ランク値」でリストをソートすることです。
これは正しいアプローチですか?もしそうなら、ActiveRecordを使用してこのテーブル列を作成するにはどうすればよいですか?
リストの順序がリンクの賛成票の数と作成日の組み合わせに依存する Reddit タイプのアプリを作成しようとしています。私の計画は、「作成日」と「賛成票」を「ランク値」に組み合わせた「リンク」テーブルに新しい列を作成し、「ランク値」でリストをソートすることです。
これは正しいアプローチですか?もしそうなら、ActiveRecordを使用してこのテーブル列を作成するにはどうすればよいですか?
純粋に表示目的で使用されるメタ属性がある場合は、その場でそれを生成するメソッドを作成することが適切です。
オブジェクトの並べ替えにも使用する場合は、列に格納することをお勧めします。うまくいけば、それは現在の時刻などには依存せず、他の属性のみに依存します:
before_save :calculate_rank
def calculate_rank
self.rank = self.upvotes + self.clicks * 5;
end
残念ながら、あなたのユースケースでは、おそらく「どれだけ新鮮か」という観点から、列が作成日に依存すると具体的に述べました-移動するターゲット。
この 2 つの方法で解決できます。rank
新しいリンクの値を無期限に増やし続けるか、アイテムをタイム バケットに入れて定期的に更新する (おそらく、1 日または 1 週間が終わるとスコアが低下します)。
基準でソートして Model.rank_value を呼び出す「rank_value」などのメソッドをモデルに作成できます。