RailsのビューはActionViewにより提供される便利なヘルパーメソッド群によりテンプレートエンジン以上の恩恵を受けられます。ヘルパーメソッドとはビューでよく使う処理を簡単に実装できるようするためのメソッドです。
ここでは、よく使うヘルパーメソッドの使い方とヘルパーメソッドの自作方法を紹介します。
【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.