在 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
这是最好的方法,还是有更好的方法?