2016-10-14 8 views
0

app/views/posts/show.html.erbページの投稿のリストを作成し、それぞれのIDでソートしたいと考えています。投稿のすべてが、以下のコードブロック使用して私のアプリ/ビュー/記事/ index.html.erbページに記載されている方法と同様にビューの表示ページのすべての記事を一覧表示する -

<% @posts.each do |post| %> 
<div class="col-md-4"> 
    <%= image_tag post.img %> 
    <h1><%= post.title %></h1> 
    <p><%= post.content %></p> 
    <br> 
    <%= link_to 'Read More', post_path(post) %> 
</div> 
<% end %> 

を私はそれぞれ同じを使用するようにしてください私はエラーが表示されます。しかし、これは私が現在持っているもの(それが唯一の現在のポストにIMG /リンクを表示する)です:

<h1>Recent Posts</h1> 
    <ul> 
    <li> 
     <%= image_tag @post.img %> 
     <h2> 
     <%= link_to @post.title %> 
     </h2> 
    </li> 
    </ul> 

答えて

2

指数は、xのすべての項目を表示するためのものです。

def index 
    @posts = Post.all 
end 

あなたがしていることは、すべての投稿を取り込み、@postsという配列に入れることです。 .each | x |を使ってそれらを繰り返したり、列挙することができます。つまり、配列内の各オブジェクトを通過して、ポストイメージ、タイトル、およびコンテンツを表示します。

あなたはあなたのショーが表示されませんでしたが、一般的にショーは次のようになります。だから、あなたが持つポスト見つけている

def show 
    @post = Post.find(params[:id]) 
end 

:IDをと@postにそのデータを格納します。これは1つのオブジェクトにすぎず、配列ではありません。だからこそ、あなたの.each do | x |動作していません。

あり

def show 
    @posts = Post.all 
end 

を行うことからあなたを止めるものは何もありません。しかし、あなたはレールのショートカットを利用することができないと、プログラミングでは良いされていない、自分自身を繰り返しています。同じ情報を使用する2つの非常に異なるウィンドウが必要な場合は、javascriptを使用してhtml/cssでそれを把握することをお勧めします。

0

PostsControllerのshowアクションはおそらく@postであり、@postsではありません。 .each@postは、Postのインスタンスであり、配列ではなく、.eachに応答するものではないため、使用できません。 @postsがインデックスアクションにどのように設定されているかを見て、それをあなたのショーアクションにコピーしてください。

関連する問題