10
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】独自ヘルパー(Helper)メソッドの使い方

Posted at

#ヘルパーとは
helper(ヘルパー)を一言で表すと、
「処理を別ファイルに分離し、viewをよりシンプルにDRYに書くためのモジュール」
です。
(view以外もhelpできますが、基本的にはviewをhelpしてくれるものだと捉えましょう)

DRY(Don’t Repeat Yourself)原則とは
「同じコードを重複させない」という意味だけでなく、「1カ所の修正で済むのであれば、できる限りそうなるようにプログラムを作るべき」という意味をもつ原則です。

Railsには、もともと用意されているhelper
link_toform_withimage_tag などが存在しますが、

今回は、それとは別に独自ヘルパーについて説明します。

#独自ヘルパーの活用方法

ヘルパーモジュールは、app/helpers配下にあります。
ファイルの使い分けとして、

application_helper.rbは、
アプリケーション全体にわたって使うヘルパーメソッドを定義
xxx_helper.rbは、
その"xxx"だけで使うヘルパーメソッドを定義

と使い分けると、ヘルパーメソッドの管理が楽です。

※デフォルトでは、application_helper.rbファイルが準備されていますが、
xxx_helper.rbrails g controller〜の段階で一緒に作成されます。

###例
####①名前を入れるとこんにちは!〜を自動で追加する独自ヘルパーメソッド生成

sumple_helper.rb

module SumpleHelper

  def hello(name)
    "こんにちは! #{name}さん。"
  end

end

####②実際に使用

sumple.htmlerb

<%= hello("ミルクボーイ") %>

####③ブラウザでの実行結果


こんにちは! ミルクボーイさん。

となります。

#注意点
もし、同じ名前のヘルパーが読み込まれてしまうと、Viewファイルなどでヘルパーを使ったときにどちらのヘルパーが使用されるか分かりません。

そのため、ヘルパー名はの命名には気をつけましょう!

→他のViewファイル等で被らない独自の名前をつけるなど。
ちなみに今回のようなhelloは危険なヘルパー名と言えます。

#helperを活用する基準
●同じ表示が繰り返される場合
Railsアプリケーションのあらゆる箇所で、同じ内容を表示する場合は、ぜひhelperを利用しましょう。

helperとして1カ所にまとめておくことで、その内容の修正が簡単になります。

●ほぼ同じViewだが、属性などによって表示内容を変えたい場合
動的にHTMLを生成する場合、Viewファイル内にプログラムを記載することがあります。
しかし、そうするとViewファイルの可読性が悪くなります。
そんなときに、helperを使って分離してやることで、シンプルで綺麗なコードを実現できます。

#さいごに
今回紹介したように、独自のhelperを定義して開発を進めていくことによって、よりスマートに開発を進めていけます。

これを機にRailsにはどんなhelperが用意されているのか、またどんな独自helperを作ることができるのか。
調べてみてはいかがでしょうか!

【参考】
https://web-camp.io/magazine/archives/19136

10
7
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
10
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?