3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails×Bootstrap】Bootstrap.jsを活用した動的なタブの実装

Last updated at Posted at 2021-05-17

#実装すること

  • bootsrap.jsを使用して動的なタブを実装します。
    公式でいう「Javascript Behavior」が該当します。

Bootstrap: https://getbootstrap.jp/docs/4.5/components/navs/#javascript-behavior

完成形

  • タブをクリックするとロードせずに切り替えができます。
  • 内容は設定した内容で表示ができます。
    gif (9).gif

前提

  • bootstrapをインストールしていること。

    以下、私のgemのバージョンと記載方法です。
Gemfile
gem 'bootstrap', '~> 4.5'
gem 'jquery-rails'
assets/stylesheets/application.scss
 *= require social-share-button
 *= require_tree .
 *= require_self
 */
@import "bootstrap";
assets/javascripts/application.js
//= require jquery3
//= require popper
//= require bootstrap-sprockets

参考までに: https://qiita.com/NaokiIshimura/items/c8db09daefff5c11dadf

手順

  1. bootstarp.jsのダウンロード
  2. assetsに格納
  3. viewへの記載

実装

###1.bootstarp.jsのダウンロード

まず、bootsrap公式を確認します。

スクリーンショット 2021-05-17 19.08.12.png

1行目にある通り、使用するには「bootstrap.js」が必要だとわかります。
大抵の方が、bootstrapをインストールしているから使えるものだと思っていました。(私もそうでした。)

  • どこにそのファイルがあるかというと、**公式ページ**にあります。

飛ぶとトップ画面にダウンロードとあるので、クリックしてください。
スクリーンショット 2021-05-17 19.14.23.png

  • 次にコンパイルされたCSS と JSの項目にダウンロードとあるので、そちらでファイルをダウンロードしてください。
スクリーンショット 2021-05-17 19.15.30.png

###2.assetsに格納

ダウンロードしたファイルの中にCSSとJSフォルダがあるので、jsファイルから
bootstrap.jsをrailのassets/javascripts内に格納してください。

スクリーンショット 2021-05-17 22.13.32.png

###3. viewへの記載

最後に、使用したいviewファイルにbootsrapドキュメントからコピーして貼り付けます。
コピー元: https://getbootstrap.jp/docs/5.0/components/navs-tabs/#javascript-behavior

views/members/index.html.erb
<ul class="nav nav-tabs" id="myTab" role="tablist">
  <li class="nav-item">
    <a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="profile-tab" data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Profile</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="contact-tab" data-toggle="tab" href="#contact" role="tab" aria-controls="contact" aria-selected="false">Contact</a>
  </li>
</ul>
<div class="tab-content" id="myTabContent">
  <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">...</div>
  <div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">...</div>
  <div class="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">...</div>
</div>

以下、私の記述です。参考までに。

views/members/connections.html.erb
<ul class="text-center nav nav-tabs" id="myTab" role="tablist">
  <li class="nav-item w-50 bg-light">
    <a class="nav-link active link-text" id="follower-tab" data-toggle="tab" href="#follower" role="tab" aria-controls="follower" aria-selected="true">フォロー</a>
  </li>
  <li class="nav-item w-50 bg-light">
    <a class="nav-link link-text" id="followed-tab" data-toggle="tab" href="#followed" role="tab" aria-controls="followed" aria-selected="false">フォロワー</a>
  </li>
</ul>

<div class="tab-content" id="myTabContent">
  <div class="tab-pane fade show active" id="follower" role="tabpanel" aria-labelledby="follower-tab">
    <div class="ml-1 mt-3 mb-2">全フォロー数: <%= @member.follower.count %></div>
    <% @member.following_member.each do |member| %>   

          ----省略----
  <% end %>
 </div>
 <div class="mb-5 tab-pane fade" id="followed" role="tabpanel" aria-labelledby="followed-tab">
    <div class="ml-1 mt-5 mb-2">全フォロワー数: <%= @member.followed.count %></div>
    <% @member.follower_member.each do |member| %>
   
            ----省略----

  <% end %>
 </div>
</div>

以上です。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?