単一のデータベースにすべてのデータが必要な場合は、それをフィルタリングする必要があるため、正しい方向に進んでいます。とにかくデータは常にフィルタリングされるので、これはまったく問題ありません。大したことではありません。また、あなたが説明していることは、データをアーカイブ済みとしてマークすることに非常に似ているように聞こえます(現在のシーズンにないものは基本的にアーカイブされます)。これは、すべてのレコードにブール値フラグを設定することで非常に一般的に行われ、通常は達成されます(私は信じています)それを非表示にするための true または false、または同等のメソッド。
scope
おそらくまたはが必要になるでしょう。 adefault_scope
の主な欠点は、現在のシーズン以外のデータにアクセスするすべての場所でdefault_scope
使用する必要があることですが、デフォルトのスコープを使用しないということは、すべての呼び出しでスコープを指定する必要があることを意味します。デフォルトのスコープは時々おかしな場所に適用されるように見えることもあり、私の経験では、使用しているスコープについて常に明示することを好みます (つまり、 を使用することはありません) が、これはより個人的な好みです。.unscoped
default_scope
データベースの設計方法に関しては、そのデータが現在のシーズンにあるかどうかを示すブール値フラグをすべてのレコードに追加するかseason_id
、現在のシーズン ID とフィルターに対してチェックされる を含めることができます。その通りです。いずれにせよ、ある種のスコープはそれを行うための良い方法です。
単純なブール値を使用する場合、現在のシーズンの終わりまたは新しいシーズンの開始時に、現在のシーズン レコードを最新ではないものとしてマークする必要があります。これを便利にするためにレーキ タスクまたは類似のタスクが必要になる場合がありますが、メンテナンスが少し必要になります。
コードでプラス定数を使用してseason_id
現在の季節を示す場合 (おそらく構成ファイルを介して)、季節ごとに DB の更新が必要ないため、現在の季節としてマークする方が簡単です。