如何将两个数组一起添加并对它们运行方法以进行排序,限制或分页

时间:2011-09-27 16:14:48

标签: ruby-on-rails ruby-on-rails-3

我正在尝试为网站制作新闻Feed并且我将两个不同类的数组一起添加以创建@feed_items数组。但显然我需要能够通过created_by

订购新数组

现在我有:

  def home
        @comments = Comment.all
        @images = Image.all
        @feed_items = @comments+@images
  end

现在,当我在视图中循环@feed_items时,循环显示所有注释(按created_at排序),然后显示图像(按created_at排序)。但我需要订购整个阵列,以便所有内容混合并正确排序。

我试着这样做:

  def home
        @comments = Comment.all
        @images = Image.all
        @feed_items = (@comments+@images).order('created_by DESC')
  end

但是我得到@feed_items数组的未定义方法错误。与使用限制或分页匹配相同。

2 个答案:

答案 0 :(得分:3)

如果您不能在SQL中执行此操作,在单个查询中处理两个不同的表时就是这种情况,您可以使用Ruby执行此操作:

def home
 @comments = Comment.all
 @images = Image.all

 @feed_items = (@comments + @images).sort_by(&:created_at)
end

请记住,使用all方法可能很危险,因为您可能拥有数万条记录。如果没有别的话,使用像will_paginate这样的分页系统总是一个好主意。

答案 1 :(得分:2)

您需要致电sorttake

def home
    @comments = Comment.all
    @images = Image.all
    @feed_items = (@comments+@images).sort{|x,y| y.created_by <=> x.created_by}
end

home.take(10)