読者です 読者をやめる 読者になる 読者になる

Rails Webook

自社のECを開発している会社で働いています。Rails情報やサービスを成長させる方法を書いていきます

Railsで独自ヘルパー(Helper)メソッドの作成方法

Rails初級 Rails View

Railsでの自前の独自ヘルパー(Helper)メソッドの作成方法について説明します。

Railsが既に多くのヘルパーメソッドを用意しているため、 Google検索Rails API 公式ページで探して、それでもなかったら実装して下さい。

動作確認

  • Rails 4.1

目次

  1. 独自ヘルパーメソッドの実装
  2. 独自ヘルパーメソッドの使用
  3. 一歩上のRailsのヘルパーについての情報

独自ヘルパーメソッドの実装

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

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

という使い分けにすると、ヘルパーメソッドの管理が楽になります。

今回は、「条件が true の場合に、divタグを表示するヘルパーメソッド」を作ります。
アプリケーション全体で使うと思うため、application_helper.rbに追加します。

# app/helpers/application_helper.rb
module ApplicationHelper

  // 条件が true の場合のみ、divタグを表示する
  def div_tag_if(condition, content_or_options_with_block = nil, options = nil, escape = true, &block)
    # condition が trueの場合だけ、content_tagメソッドでdivタグを作成する
    # falseの場合は、何も作成しない
    if condition
      content_tag("div", content_or_options_with_block, options, escape, &block)
    end
  end
end

独自ヘルパーメソッドの使用

ヘルパーモジュールは、 Railsに自動で読み込まれるため、View内ですぐに使うことができます。
では、View内で使ってみましょう。

# app/views/products/index.html.erb

<!--  商品が空の場合、divタグで囲まれた"商品がありません。"を表示します。 -->
<%= div_tag_if(@products.empty?, "商品がありません。") %>

一応表示された画面です。
f:id:nipe880324:20140802185658p:plain:w240



一歩上のRailsのヘルパーについての情報

RailsはすべてのHelperをロードします。つまり、どのビューファイルからでも、すべてのヘルパーのメソッドを使うことができます。
そのため、自前のヘルパーメソッドの命名が重複しないようする必要があります。

# app/helpers/application_helper.rb
module ApplicationHelper
  # メソッド名が重複している
  def some_method
  end
end

# app/helpers/somes_helper.rb
module SomesHelper
  # メソッド名が重複している
  def some_method
  end
end

Helperが増える場合は、Draperなどのデコレーターを使うことを検討した良い場合があります。

以上です。