連載
» 2014年08月29日 18時00分 公開

RailsのテンプレートエンジンSlimの書き方とActionViewのヘルパーメソッド、レイアウトの使い方開発現場でちゃんと使えるRails 4入門(8)(2/3 ページ)

[著:林慶、監修:山根剛司,株式会社アジャイルウェア]

ActionViewのヘルパーメソッド

 RailsのビューはActionViewにより提供される便利なヘルパーメソッド群によりテンプレートエンジン以上の恩恵を受けられます。ヘルパーメソッドとはビューでよく使う処理を簡単に実装できるようするためのメソッドです。

 ここでは、よく使うヘルパーメソッドの使い方とヘルパーメソッドの自作方法を紹介します。

よく使うヘルパーメソッド6選

【1】image_tag

 IMGタグを出力します。引数に画像ファイル名(またはパス)を渡して使用します。オプションとして「alt」属性を付加する「alt」オプションや、「width」と「height」属性を付加する「size」オプションなどが用意されています。

= imate_tag('logo.png', size: "222x111", alt: "BOOK LIBRARY")
#=> <img src="/assets/logo.png", width="222" heigth="111" alt="BOOK LIBRARY" />

【2】url_for

 URLを引数またはオプションにより生成し出力します。使用例を示します。

= url_for controller: 'books', action: 'index'
#=> '/books'
 
= url_for controller: 'books', action: 'index', only_path: false
#=> 'http://localhost:3000/books'
 
= url_for books_path
#=> '/books'
 
= url_for controller: 'books', action: 'show', id: 1
#=> '/books/1'
 
= url_for Book.first
#=> '/books/1'

【3】link_to

 Aタグ(リンク)を出力します。第1引数にリンクの文字列を渡し、第2引数で「href」属性の値となる宛先を渡します。この第2引数に渡すオブジェクトは「url_for」メソッドの引数と同じものが使えます。

 また別のオプションとしてHTTPメソッドやDATA属性で確認ダイアログのメッセージを付加することもできます。

= link_to '書籍一覧', { controller: 'books', action: 'index' }
#=> '<a href="/books">書籍一覧</a>'

【4】form_for:フォームを出力

 モデルオブジェクトのフォームを出力します。第1引数に対象のモデルオブジェクトを渡し、続けてオプションと1個のブロック変数を取るブロックを渡します。オブジェクトの各属性の入力フィールドはそのブロック内で定義していきます。

 オプションには「url_for」メソッドの引数と同じ形式で送信先のURL情報を「url」オプションに付加することなどが可能です。

= form_for @book, url: admin_path do |f|
  = f.text_field :title
  = f.submit
#=> <form accept-charset="UTF-8" action="/admin" class="edit_book" id="edit_book_2" method="post">
#=>   <div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓">
#=>     <input name="_method" type="hidden" value="patch">
#=>     <input name="authenticity_token" type="hidden" value="xxxxxxxxx">
#=>   </div>
#=>   <input id="book_title" name="book[title]" type="text" value="hoge">
#=>   <input name="commit" type="submit" value="Update Book">
#=> </form>

【5】text_field:テキストフィールドを出力

 文字列を入力するテキストフィールドを出力します。レシーバーなしで使う場合、引数にオブジェクト名とプロパティ名を渡して使用します。

「form_for」のブロック変数をレシーバーとする場合は先の「form_for」メソッドの例のようにプロパティ名だけを引数に取ります。

【6】submit:送信ボタンを出力

 フォームの内容を送信するボタンを出力します。必須ではありませんがボタン名を第1引数に渡せます。また「form_for」のブロック変数をレシーバーとすることもできますが、動作は同じです。

 これらの他にもさまざまなヘルパーメソッドが用意されています。中には廃止予定のものもあるため注意が必要ですが、用途を基に探してみてください。

ヘルパーメソッドを自作する

 さて、探してもなければ作る必要があります。

 Railsは標準で「app/helpers/application_helper.rb」というヘルパーメソッドを定義するモジュールのファイルを生成しています。コントローラーを生成する際にも、そのコントローラー名のヘルパーメソッドのモジュールファイルが生成されますが、標準の設定ではどのモジュールで定義してもどこからでも使えるようになっています。

 それでは実際にヘルパーを定義してみましょう。「application_helper.rb」をエディターで開き、ヘルパーメソッドを次のように定義します。

module ApplicationHelper
  def conv_break(text)
    return if text.nil?
    text.gsub!(/\r\n/, '<br>')
    text.gsub!(/(\n|\r)/, '<br>')
    sanitize(text, tags: %w(br))
  end
end

 このヘルパーメソッドは引数の文字列の改行コードを「<br>」タグで置き換えます。ビュー側では次のように呼び出します。

= conv_break(@book.description)

 このように、ヘルパーモジュールにメソッドを定義するだけでヘルパーメソッドとしてビューで使用できます。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。