Help us understand the problem. What is going on with this article?

ヘルパー(カスタムヘルパー)ってなんぞ?

More than 3 years have passed since last update.

Railsのviewにおけるメソッド

ただし、もともと用意されている物ではありません。
これは、自作するなりどこかからコピぺする必要があります。

Railsのviewには、元から用意されている様々なメソッドが使用できますが、それで全ての機能が満たされているわけではありません。
やはり、どこかで追加していくわけです。

欲しい機能のため、追加していくメソッド。これをヘルパー/カスタムヘルパーと言います。

どこにあるの?

Railsでは簡単なコマンドで半自動的に、アプリケーションの開発に必要な多数のファイルを作成できます。
ですので、じゃあヘルパーがどこにあるのか。あるいは、どこに作成すべきなのかというと。

app/helpers/application_helper.rb

上記のような位置にあるのですが、これはつまり、appというディレクトリ(フォルダ)の中にあるhelpersというディレクトリのさらに中。
application_helper.rbというファイルがそれに当たるということです。
これ自体は自動作成されるもので、最初は至極簡素に以下のような内容になっています。

application_helper.rb
module ApplicationHelper
end

はい。
本当にこれだけです。

この中に必要な機能を書き込んでいくことで、実際の見た目に影響するファイルであるapp/views/layouts/application.html.erbというファイルにその効果が現れます。

使い方

例として、以下。

application_helper.rb
module ApplicationHelper

 def full_title(page_title)
   base_title = "Ruby"
   if page_title.empty?
     base_title
   else
     "#{base_title} | #{page_title}"
   end
 end

end
application.html.erb
<!DOCTYPE html>
<html>
<head>
  <title><%= full_title(yield(:title)) %></title>
  〜中略〜
</head>
<body>

    〜後略〜

</body>
</html>

上はブラウザの一番上に表示されるページタイトルについての例になります。
このようにすることで、application.html.erb側に書かれているtitleタグに
def full_title(page_title)以下、endまでの効果が反映されます。

page_title = yield(:title)

以上のように考えられますので、yieldで持ってきた:title(つまり、page_title)にempty・・・つまり、内容が無ければbase_titleにあたるRubyという文字列のみを返し、内容があればRuby | page_titleという文字列をタイトルに入れ込むことができる訳です。

このように、元からあるメソッドだけでカバー仕切れないところを自分で書き込んでいくことで補う物のことをヘルパー/カスタムヘルパーと呼びます。

sanstktkrsyhsk
初心者にもなれていない未熟者です。 SE目指して学習中。 間違った事言ってたりしたらご指摘お願いしますm(_ _)m
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away