2011-10-12 35 views

回答

3
@posts = Post.limit(20).order('created_at desc') 
@photos = Photo.limit(20).order('created_at desc') 
@recent_items = (@posts + @photos).sort_by(&:created_at) 

<% @recent_items.each do |item| %> 
    <% if item.class == "Photo" %> 
    <%= image_tag item.url %> 
    <% else %> 
    <%= item.title %> 
    <% end %> 
<% end %> 

或者,使用group_by做这样的:

@recent_items = (@posts + @photos).group_by(&:created_at) 

<% @recent_items.each do |date, items| %> 
    Date: <%= date %> 
    <% items.each do |item| %> 
     Show information here. 
    <% end %> 
<% end > 

我认为逻辑移动到一个帮手,如果我是你的机码。

+0

太棒了!但我如何分页呢? – everm1nd

+1

这取决于你用于分页的内容。发布一个单独的问题。 – bricker

+0

是否曾经有一篇关于分页的后续文章? –

1

最好就是做这个是数据库。

我只想说:多态性+数据库视图。

创建包含您从两个邮政照片需要的列,包括列数据库视图“”包含模型(你需要它的多态性)的名称。将此视图称为“list_items”。然后创建一个名为“ListItem”的模型。然后,您可以像使用其他任何方式一样使用此模型,对它进行分页并随时做出任何其他操作。

ListItem.order("created_at > ?", Date.yesterday).page(params[:page]) 

而且不要忘记配置polymorphic association

然而,这一切是很容易与listable宝石来完成。一探究竟!