動的なclass="active"をcontrollerごとにつけたい、、、、
こんなことってよくあると思います。webサイトではよく見かけることも多いですね。
RailsではApplicationHelperという便利なmoduleがあるので利用していきましょう
application_helper.rb
module ApplicationHelper
def is_active_controller(controller_name)
params[:controller] == controller_name ? "active" : nil
end
def is_active_action(action_name)
params[:action] == action_name ? "active" : nil
end
def is_active_actions(action_names)
action_names.include?(params[:action]) ? "active" : nil
end
def is_active_controller_and_action(controller_name, action_name)
if params[:controller] == controller_name && params[:action] == action_name
"active"
else
nil
end
end
end
このように、たとえば一番はじめの
ruby
def is_active_action(action_name)
params[:action] == action_name ? "active" : nil
end
に対して、たとえばproducts#indexを見ていたとします。
そのとき対応しているcontrollerはproducts_controllerなので
というようにすれば、これで
```ruby:ruby resources :products ```
で生成されるアクション全てに対し、activeを付けることができます。
(とはいってもupdateやdestroyなどはviewが基本的にないので実際はshow,index,newあたりでしょうか)
もしアクションごとにもactiveを付ける、つけないを選択したいのなら2番目の
```command:ruby def is_active_action(action_name) params[:action] == action_name ? "active" : nil end ``` を使えばよくて、さらに用途を細分化するとruby
def is_active_action(action_name)
params[:action] == action_name ? "active" : nil
end
#一つだけのアクションをactiveにしたい(controllerは関係ない)
def is_active_actions(action_names)
action_names.include?(params[:action]) ? "active" : nil
end
#複数のアクションをactiveにしたい(controllerは関係ない)
def is_active_controller_and_action(controller_name, action_name)
if params[:controller] == controller_name && params[:action] == action_name
"active"
else
nil
end
#controllerとそのアクションを指定(controllerは関係する)
activeをcss(sass)でカスタマイズすればさらに良い感じになります( ^_^)/~~~