ブログアプリを作成した際、投稿一覧を表示するためにBootstrapのcardを利用しました。
Card全体を詳細表示へのリンクにする方法をまとめます!
BootstrapのCardを実装する前の一覧表示はこんな感じです。
<p><%= l post.created_at, format: :short %></p>
<h5 class="card-title"><%= post.title %></h5>
<p class="card-text"><%= post.content %></p>
<%= link_to "詳細", post %>
それぞれ投稿日時とタイトル、本文を1行だけ表示させています。
1. 投稿一覧をCardで表示
Bootstrapに用意されているクラスを利用します。
Cardについてはこちらを参照。
https://getbootstrap.jp/docs/4.5/components/card/
<div class="card border-dark mb-3" style="max-width: 18rem;">
<div class="card-body text-dark">
<p><%= l post.created_at, format: :short %></p>
<h5 class="card-title"><%= post.title %></h5>
<p class="card-text"><%= post.content %></p>
<%= link_to "詳細", post %>
</div>
</div>
ひとまずいい感じになりましたー!!
今回headerとfooterは必要なかったので省いています。
2. Card全体をリンクに
今のままではCardの中に詳細ページへのリンクがそのまま表示されてしまっているので、このリンクをCard全体に適用させたい…。
実装方法を調べたところ、<div class="card-body text-dark">
ではなく <a href="#" class="card-body text-dark">
のような感じで、全体を囲むと良いらしい!
<div class="card border-dark mb-3" style="max-width: 18rem;">
<a href="/posts/<%= post.id %>" class="card-body text-dark">
<p><%= l post.created_at, format: :short %></p>
<h5 class="card-title"><%= post.title %></h5>
<p class="card-text"><%= post.content %></p>
</a>
</div>
一つ一つの投稿を取り出すためにpost.id
が必要になりますが、その際にイコールを忘れてしまうとidが取れなくなるので、必ず<%= post.id %>
と記述します。
私はこれで何度かはまりました。。
<実行結果>
これでCard全体を詳細ページへのリンクにすることができました!
もう一つ、aタグではなくlinkタグの方法で実装するやり方も。
結果としては、Card全体を<%= link_to ~ do %>
と <% end %>
で囲みます!
<div class="card border-dark mb-3" style="max-width: 18rem;">
<%= link_to post, class: "card-body text-dark" do %>
<p><%= l post.created_at, format: :short %></p>
<h5 class="card-title"><%= post.title %></h5>
<p class="card-text"><%= post.content %></p>
<% end %>
</div>
aタグで記載していたBootstrapのclass "card-body text-dark"
はlinkタグの中にrailsの記述方法で書き直します。
普段 <%= link_to ~ %>
のように1行でしか記述したことがなかったので、do~endで囲むやり方は初めて知りました!
備忘録として残しておきます。