27
14

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 5 years have passed since last update.

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

Posted at

#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という文字列をタイトルに入れ込むことができる訳です。

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

27
14
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
27
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?