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

#実装すること

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

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

# 完成形

* タブをクリックするとロードせずに切り替えができます。
* 内容は設定した内容で表示ができます。
![gif (9).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1029483/86121230-b471-e455-8d57-23581c6d3fba.gif)

# 前提

* bootstrapをインストールしていること。<br>
以下、私のgemのバージョンと記載方法です。

```:Gemfile
gem 'bootstrap', '~> 4.5'
gem 'jquery-rails'
```

```css:assets/stylesheets/application.scss
 *= require social-share-button
 *= require_tree .
 *= require_self
 */
@import "bootstrap";
```

```css: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1029483/a05ec89e-111f-10f9-da26-191084aa6227.png)|
|:-:|

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

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

https://getbootstrap.jp/

飛ぶとトップ画面にダウンロードとあるので、クリックしてください。
![スクリーンショット 2021-05-17 19.14.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1029483/3965f4e3-16ab-dbf9-309b-72048647e06e.png)

* 次にコンパイルされたCSS と JSの項目にダウンロードとあるので、そちらでファイルをダウンロードしてください。

|![スクリーンショット 2021-05-17 19.15.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1029483/81c902f2-5dc2-8888-c738-5f0967034492.png)|
|:-:|

###2.assetsに格納

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

![スクリーンショット 2021-05-17 22.13.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1029483/9ee4aef2-d745-6281-79be-58014e49dbf4.png)

###3. viewへの記載

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

```erb: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>
```

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

```erb: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>
```

以上です。