#はじめに
タイトル通り、モデルに定義するメソッド、ヘルパーに定義するメソッドの違いがいまいち分からなくなったのでまとめておきます。
##モデルに定義するメソッド
極力各モデルの責務部分は各モデルに任せ、コントローラーは指示を出すだけにする
例
# モデル
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>
##参考文献