LoginSignup
15
11

More than 5 years have passed since last update.

RailsでのHelperの役割について

Posted at

開発しているなかで、Helperの役割かModelの役割か迷うことがあったので、Helperの役割について考えてみました。

よく言われているHelperの役割

View層の中で、単純な表示以外の処理を担当します。

Modelとの使い分け

ログインユーザーが管理者権限がある場合は管理者メニューを表示、管理者権限がない場合はプロフィールを表示する。

変更前

View.html.haml
-if @user.role == "admin"
  link_to "管理者メニュー", •••
-else
  link_to "#{@user.last_name} #{@user.first_name}様のプロフィール", •••

変更内容

管理者権限があるかの判定

Modelに実装します。

Model.rb
def admin?
  role == "admin"
end

リンク文言の生成

悩ましいですが、フルネームを生成するのはModel、それ以外はHelperという使い分けがいいのではないでしょうか。

Model.rb
def full_name
  "#{last_name} #{first_name}"
end
Helper.rb
def profile_link(user)
  "#{user.full_name}様のプロフィール"
end

変更後

View.html.haml
- if @user.admin?
    link_to "管理者メニュー", •••
  else
    link_to profile_link(@user), •••

思想としては、データに関する処理はModel、表示に関する処理はHelperに実装なのですが、明確な切り分けってできないと思いました。「フルネームの生成」が表示に関する処理なのかが曖昧なため、Helperで実装する人もいるのではないでしょうか。
Draperという設計もあるらしいですが、結局のところ、「表示に関する処理」というところを明確に線引きできなければ根本解決にならず、Draperに実装するかModelに実装するか悩むことになります。

結論

Helperの役割の明確な線引きはできない。ただ何となく、htmlに関する処理か文字の加工程度に留め、少しでも表示以外に使いそうなものはModelに実装してしまっていいのではと思います。
いい方法があれば教えてください。

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