Railsでアクティブなページに対応するタブのスタイル変える場合
タブナビゲーションで現在いるページに対応するタブのみcssを適用したい場合、application_helper.rbか、viewに直書きするかのどっちかで実装されてることが多いよう
例えばトップページにいる場合
<!-- # application.html.erb --> <ul class="nav"> <li class="item active">TOP</li> <li class="item">PROFILE</li> <li class="item">LINKS</li> </ul>
こんな感じで.activeを付け加えたい。
application_helper.rbに書く場合
# application_helper.rb def active?(controller_name) return "active" if controller_name == params[:controller] end
<!-- # application.html.erb --> <ul class="nav"> <li class="item <%= active?("articles") %>">ARTICLE</li> <li class="item <%= active?("profile") %>">PROFILE</li> <li class="item <%= active?("links") %>">LINKS</li> </ul>
viewに直書きする場合
<!-- # application.html.erb --> <ul class="nav"> <li class="item <%= "active" if params[:controller] == "articles" %>">ARTICLE</li> <li class="item <%= "active" if params[:controller] == "profile" %>">PROFILE</li> <li class="item <%= "active" if params[:controller] == "links" %>">LINKS</li> </ul>
application_helper.rbに書く方がいいのかな?
またarticleに添付されたファイルを扱うarticle_attachmentsコントローラのアクションの場合でもARTICLEタブに.activeをふりたいような場合、viewに直書きすると見づらくなってよろしゅうないということで、active?メソッドを
# application_helper.rb def active?(*controllers_name) return "active" if controllers_name.include?(params[:controller]) end
として任意の数のcontroller名を受け取れるようにして、params[:controller]が含まれているかいないかで判定するようにすると、
<!-- # application.html.erb --> <ul class="nav"> <li class="item <%= active?("articles","article_attachments") %>">ARTICLE</li> <li class="item <%= active?("profile") %>">PROFILE</li> <li class="item <%= active?("links") %>">LINKS</li> </ul>
割と見やすい気がする。
「ルーティングの特定のネームスペース以下のものだけこういう処理」みたいなのができるようであれば、それが一番簡単にかける気もする…
しばらくRailsとはお別れして、androidやる日が続きそう。
「Land of Lisp」とか「Rubyによるデザインパターン」とか「入門 機械学習」買ったのに積んでるからそれも読まんと…