Ruby on Rails Collect返回封闭的数组(变量:未定义的方法`model_name'用于Array:Class)

时间:2011-01-30 15:08:19

标签: ruby-on-rails ruby arraycollection

我有一个控制器正在返回我网站的所有文章

 @articles = Article.find(all)

和用于渲染@articles数组的部分。

我已将控制器更改为:

@articles = User.find(1).topics.map { |t| t.articles }

所以我也可以返回其他一些数据

在Rails控制台上检查后,我发现问题是collect的输出数组与Article.find(all)不匹配

find(all)的输出数组

[#<Article id: 1, user_id: 2, title: "test">]

收集

的输出数组
[[#<Article id: 1, user_id: 2, title: "test">]] 

当我试图渲染parcial时,我得到:

variable:undefined method `model_name' for Array:Class 

我的索引

<%= render :partial => @articles%> 

然后是parcial:

<%= link_to_unless_current h(article.title), article %> <%= h(article.body) %>

有谁知道如何用数组的双括号[[]]克服这个问题?

1 个答案:

答案 0 :(得分:1)

首先,对于第一行,我认为你的拼写错误应该是:all而不是all:D

t.articles会为您提供一系列文章。

因此map {|t| t.articles}为您提供了一系列文章集合(数组数组)。

你可以试试这个:

@articles = User.find(1).topics.map { |t| t.articles }.flatten.uniq
# uniq if an article could belongs to two or more topics. Otherwise it is not needed.