Ryoの日記

備忘ログ

helperメソッドをview・controllerで使う

helperメソッドの使い方

ヘルパーメソッドの使い方をちゃんと理解できていなかったので備忘録として残します。

 

目次

1,viewでヘルパーメソッドを使う

2,controllerでヘルパーメソッドを使う

3,controllerでヘルパーメソッドを定義する

 

1,viewで使う

Railsのhelper.rbはviewで使うメソッドを集めたモジュール(メソッドの塊)のイメージです。

helper.rbで作っておけば、どのviewからも使うことが可能になります。

 

例えば、、

sessions_helper.rb

module SessionsHelper

def logged_in?
!@current_user.nil?
end

end


application.html.erb

<% if logged_in? %>
<li><%= link_to "Home", "/" %></li>
<li><%= link_to "About", "/about" %></li>

sessions_helperで設定しておいて、htmlの条件で使用することでhtml側の記述をhelperでまとめることができます。複数箇所で使う場合に、同じコードを描かずに済むのでより見やすいコードにすることができます。

 

2,controllerで使う

ヘルパーメソッドをcontrollerで使いたい場面もあります。

ただし、いきなりcontrollerにヘルパーメソッド内のメソッドを記述しても「そんなメソッドないよ!」と怒られてしまうので、controller内で使いたい場合は、使いたいcontrollerに`include helper名`を入れます。

class UsersController < ApplicationController
include SessionsHelper

def make
if logged_in?
#........
else
#........
end
end

今回は例でusers_controllerで記述しましたが、

全てのcontrollerで使えるようにしたい場合はapplication_controllerで記述するなどしてください。これで、controllerの各メソッド内でヘルパーメソッドが使えるようになります。

 

3,controllerでヘルパーメソッドを定義する

controllerでもviewでも頻繁に使用するメソッドがある場合に、controller内に`helper_method :メソッド名`とすることで、controller内でも使えるヘルパーメソッドとして記述することもできます。

 

class ApplicationController < ActionController::Base
helper_method :logged_in?

private
 
def logged_in?
!@current_user.nil?
end
end

今回はapplication_controllerに記述したので、全てのviewとcontrollerから呼び出せるメソッドとして使えるようになります。

 

 

 最後まで見ていただきありがとうございます。

 もし何かおかしなところや気になるところがあればコメントお願いします!