0

私のウェブサイトのすべての記事を返すコントローラーがありました

 @articles = Article.find(all)

@articles配列のレンダリングに使用されるパーシャル。

コントローラを次のように変更しました:

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

だから私は他のデータも返すことができます

Rails Consoleで調べたところ、問題はcollectの出力配列がArticle.find(all)と一致しないことであることがわかりました。

find(all)の出力配列

[#<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) %>

配列の二重角かっこ[[]]の問題を克服する方法を知っている人はいますか?

4

1 に答える 1

1

まず、最初の行については、 :D:allの代わりにすべきタイプミスがあると思いますall

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.
于 2011-01-30T15:43:23.880 に答える