ユーザーに表示されるフィードがあり、4 つの異なるモデル タイプが含まれています。
day オブジェクトをフィードに挿入することで、エントリを日ごとにグループ化することをシミュレートします。
フィードは時系列で並べ替えられ、ページ分けされます。
これが私が現在フィードを作成する方法です。
def get_feed initial_feed_position=0, number_of_entries_to_get=30
# display is called on each model to get them all into a standard format
feed = (first_models + second_models + third_models + forth_models).map { |feed_entry| feed_entry.display }
feed += day_entries_for_feed(feed)
end_feed_position = initial_feed_position + number_of_entries_to_get
(feed.sort_by { |feed_entry| -feed_entry[:comparison_time].to_i })[initial_feed_position...end_feed_position]
end
def day_entries_for_feed feed
# iterate over a set of dates that contain feed entries
feed.map{ |feed_entry| feed_entry[:date] }.uniq.map do |day|
# building the day object in the standard feed entry format. fields that are not relevant to this question have been left out.
{
type: 'day',
comparison_time: (day + 24.hours - 1.second).time # to ensure that the day appears above it's corresponding entries in the feed, the comparison time is set to 1 second before the day ends
}
end
end
時間が経つにつれて、システム内のオブジェクトの数が増加し、このメソッドを使用してフィードを構築するのに長い時間がかかるようになりました。それを行うより良い方法はありますか?
Rails 3.2.13、Ruby 1.9.3、および PostgreSQL 9.1.9 を使用しています。