5.8.すべての記事を一覧表示する
記事を一つ表示できたんだから、保存されている記事全部表示することなんてちょちょいのちょいでしょ。
articles#index
これが良さそう
ルートを決めてたら次にやることは
①アクションを作る
②ビューを作る
ですね(もう何回もやってきた)
articles_controller.rb
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
def show
@article = Article.find(params[:id])
end
def new
end
def create
@article = Article.new(article_params)
@article.save
redirect_to @article
end
private
def article_params
params.require(:article).permit(:title, :text)
end
end
①コントローラにindexアクションを追加しました。
コントローラくんの仕事がだんだんわかってきたけど、モデルくんとビューくんの橋渡しみたいな感じだね。
今回はArticleモデルに保存されているすべての記事をビューに渡したいから
@articles = Article.all
と記述して、@articles
にモデルの中身を全部ぶちこんでいる。
前節で学んだけど、アクション内のインスタンス変数(@ほにゃらら)の中身は、裏でRailsちゃんが働いてて絶えずビューへコピーされる。
Article.all
と書くことでArticleモデルの全レコードを抽出したことになるらしい(SQL書かないって便利)
index.html.erb
<h1>Listing articles</h1>
<table>
<tr>
<th>Title</th>
<th>Text</th>
<th></th>
</tr>
<% @articles.each do |article| %>
<tr>
<td><%= article.title %></td>
<td><%= article.text %></td>
<td><%= link_to 'Show', article_path(article) %></td>
</tr>
<% end %>
</table>
②indexビューを作りました。
前にも出てきたけど、<% ~ %>
で囲まれたところにはRubyが書ける。
アクションで宣言したインスタンス変数もこの中で使用できる。
<% @articles.each do |article| %>
<tr>
<td><%= article.title %></td>
<td><%= article.text %></td>
<td><%= link_to 'Show', article_path(article) %></td>
</tr>
<% end %>
今回大事なのがこの部分で、
<% @articles.each do |article| %>
~
<% end %>
ここで@articles
に入っている記事に対してひとつずつ処理を行い
<tr>
<td><%= article.title %></td>
<td><%= article.text %></td>
<td><%= link_to 'Show', article_path(article) %></td>
</tr>
そのひとつひとつの記事のタイトルとテキストと、あとその記事へのリンクを表示している。
え?
リンク?