5.9.リンクの追加
前節でさらっと導入されてたリンクについての節だよ。
Webページを作るのに必須と言ってもいいほどのリンクだけどRails上ではどうやって実装するのだろう。
Railsのリンクはビューヘルパーというメソッド集の内の一つだよ。
ビューヘルパーといえばフォームを作る時にも出てきたね。
form_withってやつ。
リンクはどのように書くかというと
link_to '文字', リンク先のパス
こんな感じ。
indexビューに新規記事作成ページ(newビュー)へのリンクを貼ってみよう。
<h1>Listing articles</h1>
<%= link_to 'New article', new_article_path %>
<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ビューにNew article
というリンクができてそれを押すと前に作ったnewビューにジャンプした。
<%= link_to 'New article', new_article_path %>
この書き方だけど、'New article'
はいいとして、気になるのはnew_article_path
の方だ。
Prefixの中にnew_article
がある。
それはnewアクションへのパスだ。
前にも話したけど、Prefix + _pathって書けばそれがアクションへのパスとして使えるんだね。
そういえばindexページにはもう一つリンクがある。
<% @articles.each do |article| %>
<tr>
<td><%= article.title %></td>
<td><%= article.text %></td>
<td><%= link_to 'Show', article_path(article) %></td>
</tr>
<% end %>
前節で作った記事の一覧から各記事にとべるリンクだ。
ルーティングと照らし合わせてこれを読み解くと、
article_path(article)
つまりshowアクションへのリンクだ。
パスの後ろに(article)
って書いてるけど…
article
はeach do |article|
のarticle
で繰り返しの中のひとつひとつの記事が格納されている変数だ。
showアクションってどんなだったっけ
def show
@article = Article.find(params[:id])
end
受け取ったリクエストのパラメータの中から:idを取り出してそれでArticleモデルを検索してたんだった。
ということはarticle_path(article)
って書けば、そのひとつひとつの記事をパラメータとしてshowアクションへリクエストを送れるということ?
なんかリクエストのとこいまいちよくわかってない感じがするなあ。
ついでにshowビューに戻るリンクもつけたよ。
<p>
<strong>Title:</strong>
<%= @article.title %>
</p>
<p>
<strong>Text:</strong>
<%= @article.text %>
</p>
<%= link_to 'Back', articles_path %>