プログラミング 美徳の不幸

Ruby, Rails, JavaScriptなどのプログラミングまとめ、解説、備忘録。

ヘッダーメニューのハイライト

あけましておめでとうございます。


で、さっそく技術の話題ですが、グローバルに表示しておきたいメニューで、なおかつページごとにハイライトさせたいものってありますよね。
それをきれいにやる方法。

#ul.nav
  = content_tag :li, class: is_active?("admin/branches#show", "admin/branches#new", "admin/kommits#show", "admin/files#index", "admin/files#show") do
    = link_to "Content", admin_branch_path(branch)
  = content_tag :li, class: ["divider-vertical", is_active?("admin/kommits#new")] do
    = link_to "Status", new_admin_branch_kommit_path(branch)

まぁこやってクラス名を場合によってつけるだけなんですが。
◯app/helpers/application_helper.rb

def is_active?(*page)
  "active" if page.include? "#{params[:controller]}##{params[:action]}"
end


こうすれば可変長で、"users#show"と"users#index"でハイライト、とかも自由自在ですね。


ちなみにclass名を降るだけならcontent_tagじゃなくてもhamlレベルでやり方ありそうだけど、気づいたら教えて下さい