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.