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

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

 @articles = Article.find(all)

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

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

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

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

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

Выходной массив 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 ответ

Решение

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