Rails 3.2 アプリには、ポリモーフィックな ActivtyFeed モデルがあります。
class ActivityFeed
belongs_to :user
belongs_to :feedable, polymorphic: true
end
ActivityFeed インデックス ビューでいくつかのアイテムを集約する必要があります。たとえば、写真ごとに個別のアイテムをレンダリングする代わりに、写真を日付またはイベントでグループ化し、「ユーザーがアップロードした x 写真」を表示したいと考えています。
私のコントローラーは次のようになります。
@feed_items = @user.activity_feeds.sort_by(&:created_at)
@feed_array = []
photos = @feed_items.find_all{|f|f.feedable_type.eql?("Photo")}
@feed_items.delete_if{|f|f.feedable_type.eql?("Photo")}
@feed_array << @feed_items
grouped_photos = photos.group_by{|p| p.feedable.event_id}
@feed_array << grouped_photos
@feed_array.flatten!
次に、私が使用しているビューで
if feed_array.class.eql?(Hash)
render grouped photo partial
elsif feed_array.feedable_type.eql?("Post")
render single post partial
etc
配列にネストされたハッシュが含まれているため、アイテムを時系列で並べ替えることができません。
[#<ActivityFeed id: 7, user_id: 2, feedable_type: "Post", feedable_id: 3>, {2=>[#<ActivityFeed id 3, user_id: 4, feedable_type: "Photo", feedable_id: 6>]}]
この配列をソートするにはどうすればよいですか?
やってみ@feed_array.sort{|a,b| a.['created_at'] <=> b.['created_at'] }
たけど取れたcomparison of ActivityFeed with Hash failed
これが最善のアプローチですか、それとももっと良い方法がありますか?