将2个模型的数据连接在一起并按公共列排序?

时间:2011-06-07 02:49:59

标签: ruby-on-rails sorting rails-models

我有两个模型,我有兴趣合并,然后通过created_at列进行排序。其中一个模型是照片,另一个是状态。目前,我有两个选项卡,照片和状态,其中我在创建时单独显示每个模型数据。但是,我想制作另一个名为照片和状态的标签,并将它们一起显示出来。我的问题是如何在它们一起创建时显示它们。例如,我希望它有一个像这样的订单

Hell World (status posted 4 hours ago)
<img src="blah/blah" /> (posted 6 hours ago)
Hello (status posted 8 hours ago)

有什么建议吗?提前致谢

2 个答案:

答案 0 :(得分:1)

在SQL中可能有一些灵活的方法可以做到这一点,但是如果你只显示一些记录,那么在Ruby中执行它很好,并且可读。类似的东西:

@photos = Photo.recent(5)
@images = Image.recent(5)
@both   = (@photos + @images).sort_by(&:created_at).reverse

如果您的目标是展示经典活动Feed,我建议使用timeline_fu插件:

https://github.com/jamesgolick/timeline_fu

非常容易设置,非常漂亮。

答案 1 :(得分:0)

您只需将两者都添加到数组中,然后排序:

@merged = (@statuses.all + @photos.all).sort_by! {|o| o.created_at }