如何从rails中的许多模型创建所有对象的数组

时间:2011-07-20 08:15:35

标签: ruby-on-rails ruby

我在铁轨2工作..我有一个疑问。

在我的应用程序中,我有3个模型,如

博客,维基,媒体

我正在尝试使用@final创建一个数组,其中包含我的应用程序下发布的所有博客,wiki,medias。

我试过

@blogs = Blog.all
@wikis = Wiki.all
@medias = Media.all

@final = []
@final << @blogs << @wikis << @medias

上面的最终数组中有3个数组..

但是我希望用3个模型返回的对象保留最终数组

怎么做? 请提出建议

编辑

我试过的是

 @final = []
 @blogs = Blog.all
 @wikis = Wiki.all
 @medias = Media.all
 @final = @blogs + @wikis + @medias

这正是我所需要的......但它只列出了所有的博客,媒体和维基。如何根据特定对象的创建日期列出所有实体

3 个答案:

答案 0 :(得分:5)

你使用的是错误的操作符,你想要这个:

@final = @blogs + @wikis + @medias

数组的<< operator

  

将给定对象推送到此数组的末尾。

+ operator

  

返回通过将两个数组连接在一起以生成第三个数组而构建的新数组。

如果由于某种原因你真的被<<所附加,你也可以使用flatten

@final = (@final << @blogs << @wikis << @medias).flatten

但这有点无意义。如powerMicha所述,如果您不想修改任何<<,则需要使用@final(或某些临时数组)启动@blogs链。 @wikis@medias数组。

就排序而言,您可以使用sort_by!

@final.sort_by(&:created_at)

假设您在对象上使用了通常的created_at方法。

答案 1 :(得分:2)

尝试Array.flatten

  

返回一个新数组,该数组是此数组的一维展平   (递归的)。

答案 2 :(得分:2)

使用<<,您将数组放入数组中。这与:

相同
@final = [@blogs, @wikis, @medias]

我建议 mu太短加入数组的答案

@final = @blogs + @wikis + @medias

请参阅API