ビューヘルパーの作成方法 (Rails4)
[履歴] (2014/06/17 18:25:36)

概要

アプリケーションに固有の頻出処理を、自分で作成したビューヘルパーにまとめておくことで、ビューの記述を簡略化できます。

事前準備

$ rails generate scaffold myModel field1:string field2:integer field3:date field4:boolean
$ rake db:migrate

config/application.rb

module MyApp
  class Application < Rails::Application
    ...
    config.action_controller.include_all_helpers = false # ←追記してください
    ...
  end
end

ビューヘルパーを記述するファイル

"config/application.rb" への追記によって、xxx_controller.rbで使用可能なビューヘルパーは、

  • app/helpers/application_helper.rb
  • app/helpers/xxx_helper.rb

の二つとなっています。すべてのコントローラに共通のヘルパーかどうかで使い分けましょう。なお、二つ目のファイルはscaffoldで自動生成されたファイルのひとつです。

サンプルプログラム

app/helpers/my_models_helper.rb

module MyModelsHelper
  # content_tag:
  # - <p>content</p>といった開始と終了のあるタグを生成します
  # - doブロックまたはパラメータでコンテンツを指定します
  # concat:
  # - HTML内にprintします
  def sample_helper_method(my_models)
    content_tag(:div, class: :html_div) do
      concat content_tag(:p, '"&"や"<>"はエスケープされます', class: :html_p_top)
      my_models.each do |my_model|
        concat content_tag(:p, my_model.attributes['field3'], class: :html_p)
      end
    end
  end
end

app/views/my_models/index.html.erb

<%= sample_helper_method @my_models %>

出力例

<div class="html_div">
  <p class="html_p_top">&quot;&amp;&quot;や&quot;&lt;&gt;&quot;はエスケープされます</p>
  <p class="html_p">2014-06-15</p>
  <p class="html_p">2014-06-15</p>
  <p class="html_p">2014-06-15</p>
</div>
関連ページ