1
0

Controllerで定義したメソッドをViewでも使えるようにするhelper_method

Posted at

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クラスがついて、タブが押されたまま・有効になったままにすることができる

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0