Programming Journal

学習したことの整理用です。

サイドメニューのアクティブ・非アクティブ化

実装したいこと

掲示板関連のページを使用しているときは、サイドバーの「掲示板一覧」をアクティブの状態にしたい。
ユーザーのときも同様。

f:id:Study-Diary:20200905140833p:plain
サイドバー

実装

Bootstrapを使用しているので、例えばこのようにclassactiveを含めると、アクティブにしてくれます。

<a class="nav-link active" href="#">Active</a>

これを使って、アクティブにしたいときにはclassactiveを含めるようにして実装していきます。

def active_if(path)
    path == controller_path ? 'active' : ''
end

三項演算子を使い、真のときはactive、偽のときは何も返しません。
controller_pathでコントローラー名を取得できるって知りませんでした。

<%= link_to admin_boards_path, class: "nav-link #{active_if('admin/boards')}" do %>

<%= link_to admin_users_path, class: "nav-link #{active_if('admin/users')}" do %>

さっきのヘルパーメソッドを使って、現在のコントローラーがadmin/boardspathと一致しているときは、activeを返す。
するとclass: "nav-link active"となるので、アクティブになる。

参考

Railsでアクティブなページに対応するタブのスタイル変える場合 - なんかの備忘録

ナビゲーションメニューのclassどう書くべきか - clean-rails.org

controller_path | Railsドキュメント

Navs · Bootstrap