これを行う 1 つの方法は、事前に定義された小さなタイプのセットがある場合です。
class Person < ActiveRecord::Base
has_many :type_1_posts, :class_name => 'Post', :conditions => 'post_type = 1'
has_many :type_2_posts, :class_name => 'Post', :conditions => 'post_type = 2'
has_many :type_3_posts, :class_name => 'Post', :conditions => 'post_type = 3'
end
次に、次のようなコードを記述して、すべてのデータを取得できます。
@all_people = Person.includes(:type_1_posts, :type_2_posts, :type_3_posts).all
投稿の熱心な読み込みにより、各タイプの投稿の数だけでなく、各タイプのすべての投稿も利用できるようになります。
このクエリを頻繁に実行するため、このコードに追加のパフォーマンスが必要な場合は、Railsカウンター キャッシュメカニズムを使用して、Person オブジェクトの各タイプのカウントを追跡することを検討できます。
ここでの Rails の優れた点は、コードの読み取りを高速化するこのプロセス中に、メインの表示コードを変更する必要がないことです (カウンター キャッシュを追加すると、投稿の追加/削除が遅くなるため、すべての場合に必要とは限りません)。
- 初期コードを書く
- 熱心な読み込みを使用して高速化する
- カウンターキャッシュを使用してさらに高速化