LoginSignup
21
15

More than 3 years have passed since last update.

モデルに定義するメソッド、ヘルパーに定義するメソッドの違い

Last updated at Posted at 2019-05-27

はじめに

タイトル通り、モデルに定義するメソッド、ヘルパーに定義するメソッドの違いがいまいち分からなくなったのでまとめておきます。

モデルに定義するメソッド

極力各モデルの責務部分は各モデルに任せ、コントローラーは指示を出すだけにする

# モデル
class User < ApplicationRecord
  def admin?
    admin_status == true
  end
end

# コントローラー
class UsersController < ApplicationController
  def hoge
    @user = User.find_by(id: params[:id])
    @user.admin?
  end
end

関係のあるモデルにクラスメソッドやインスタンスメソッドを書くこと。

ヘルパーに定義するメソッド

ヘルパーは全ビューで共通であるためメソッド名の衝突に注意する必要がある。
下の例はトピックの作成日の表示を簡易的なものにしている。
クラスメソッドUser.find_byやインスタンスメソッドuser.admin?のように前に何もつけなくてもそのまま使える。

# application_helper
module ApplicationHelper
  def simple_time(time)
    time.strftime("%Y-%m-%d %H:%M ")
  end
end

# topics_controller
class TopicsController < ApplicationController
  def index
    @topics = Topic.all
  end
end
<!-- index.html -->
<div>
  <% @topics.each do |topic| %>
    トピック作成日<%= simple_time(topic.created_at) %>
  <% end %>
</div>

参考文献

21
15
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
21
15