0
0

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] ヘルパーメソッドって素敵

Posted at

書くこと

Railsのhelperディレクトリって、何のためにあるの?と言う疑問に答えます。

環境

Ruby 6.0.3.4
Ruby on Rails 2.6.5

結論

Ruby on Railsには、ヘルパーメソッドなるものが存在します。
そのヘルパーメソッドを、自作してerbファイルで用いることができるようにするためのディレクトリです。

ヘルパーメソッドとは?

まずは、ヘルパーメソッドとは何かということを先に述べていきたいと思います。

こちらの記事からの引用を用いて説明します。

ある動作を処理する場合にメソッド化して扱えるようにRailsにあらかじめ組み込まれた機能です。

Railsに標準搭載されているヘルパーメソッドには、

  • form_with
  • link_to
  • image_tag

などがあります。これらは以下の例のように、htmlの文法の中でrubyの文法が用いられるerb拡張子の中で利用されます。

index.html.erb
<%= form_with url: root_path do |f| %>
  <% f.label :name %>
  <% f.text_area :name %>
<% end %>

<%= link_to "トップページへ", root_path %>

このように、ヘルパーメソッドを用いる時は、<%%>のなかに記述することで、ヘルパーメソッドが利用できるようになります。

以上のコードは、以下のような形で、rubyのpost機能を持った状態で、以下のように表示されます。

スクリーンショット 2021-03-12 午前10.23.46.png

ここまでで、ヘルパーメソッドが何かということは何となく理解してもらえたでしょうか。
それでは次に、本題であるRailsのディレクトリに存在するhelpersは何のためにあるのかということを、見ていきます。

ヘルパーメソッドは自作できる!

このタイトル通り、今まで見てきたヘルパーメソッドは自作することが可能です。
その自作したヘルパーメソッドを保存するファイルをまとめているのが、helpersディレクトリということになります。

ここからは、実際にソースコードを見ながら確認していきましょう。

下準備

まず、helpersの中のファイルは、コントローラー生成時に自動生成されます。

今回は、記事管理を担当するarticlesコントローラーを元に話を進めます。

rails g controller articles

こうすると、生成されるファイルの中に

create    app/helpers/articles_helper.rb

があるのを確認できると思います。

このファイルを、コードエディターで見てみると、

articles_helper.rb
module ArticlesHelper
end

と、moduleだけがあるファイルを確認できるかと思います。

また、何でもいいので一つerbファイルを作成しましょう。
今回は、views/articles/index.html.erbという風にファイルを生成し、話を進めていきます。

ヘルパーメソッドを作成

それでは、結論で述べたように、ヘルパーメソッドを作成してみます。

articles_helper.rb
module ArticlesHelper
  def title_name(author, title)
    "#{title} by #{author}"
  end
end

こんな風に、記事のタイトルと作者をまとめて表示するメソッドを作成します。

ここで作成したメソッドを、実際に表示してみます。

views/articles/index.html.erb
<%= title_name("齋藤", "ヘルパーメソッドとは")%>

結果は以下の通りです。

スクリーンショット 2021-03-12 午前10.54.26.png

このように、引数に代入した文字通りに出力されました。

以上のことから、二つのことがわかります。

  • ヘルパーメソッドと言ってもrubyのメソッド作成文法がわかっていれば、難なく作成できる
  • ヘルパーメソッドは、railsのビューに影響を与えるもの。具体的には、rubyの文法を用いて機能を追加できる。

入力された文字列をURL判定させる。(おまけ)

今回のヘルパーメソッドを用いると、入力させたurlの要素が入った文字列を表示するときに、urlであると認識させることが可能になります。

application_helper.rb
module ApplicationHelper
  require 'uri'

  def text_url_to_link(text)
    URI.extract(text, %w[http https]).uniq.each do |url|
      sub_text = ''
      sub_text << '<a href=' << url << ' target="_blank">' << url << '</a>'

      text.gsub!(url, sub_text)
    end

    text
  end
end

このソースコードは、こちらの記事から転用となりますが、簡単にまとめると「httpとhttpsが文字列の中にあったら、aタグつけてリンク化するわ!」という機能を持つメソッドです。

やはり、ビューでメソッドを利用できることは、可能性がいろいろ広がりますね。

最後に

最後まで読んでいただき、ありがとうございます。
ソースコード、記事の書き方について「もっとこうしたほうがいいよ!」というご意見、「そこどうなっているの?」というご質問など、お待ちしております。

参考文献

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?