controllerにはhelper_methodを定義すると、viewでも使えるようになる
class ApplicationController < ActionController::Base
helper_method :current_user, :logged_in?
private
def current_user
@current_user ||= User.find_by(id: session[:user])
end
def logged_in?
current_user != nil
end
end
<% if logged_in? %>
Welcome, <%= current_user.name %>
<% end -%>
これを応用して、タブの切り替えをしてみた。
ApplicationControllerに書いたhelper_methodをオーバーライドしていく用法。
class ApplicationController < ActionController::Base
helper_method :trip_type
def trip_type
raise 'current_status not implemented'
end
end
---
# activity controller
def trip_type
:activity
end
---
# luxury controller
def trip_type
:luxury
end
---
# food controller
def trip_type
:food
end
<nav>
<ul>
<li><%= link_to " アクティビティ", xxx_path, class: (trip_type == :activity ? 'current' : '') %></li>
<li><%= link_to "ラグジュアリー", xxx_path, class: (trip_type == :luxury ? 'current' : '') %></li>
<li><%= link_to "グルメ旅", xxx_path, class: (trip_type == :food ? 'current' : '') %></li>
</ul>
</nav>
こんな感じで、例えばfood controllerのページを開いていた時は、タブはずっとグルメ旅
のところにcurrentクラスがついて、タブが押されたまま・有効になったままにすることができる