Ruby on Rails Collect Возвращает вложенный массив (переменная: неопределенный метод `model_name 'для Array: Class) - PullRequest
0 голосов
/ 30 января 2011

У меня был контроллер, который возвращал все статьи моего сайта

 @articles = Article.find(all)

и часть, используемая для рендеринга массива @articles.

Я изменил свой контроллер на:

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

Так что я могу вернуть и другие данные

После проверки на Rails Console я обнаружил, что проблема в том, что выходной массив collect не соответствует Article.find (все)

Выходной массив поиска (все)

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

Выходной массив сбора

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

Когда я пытаюсь сделать рендеринг, я получаю:

variable:undefined method `model_name' for Array:Class 

Мой индекс

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

и затем особенный:

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

Кто-нибудь знает, как решить проблему с двойными скобками [[]] массива?

1 Ответ

1 голос
/ 30 января 2011

Во-первых, для первой строки, я думаю, у вас есть опечатка, которая должна быть :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.
...