edge
詳細はrubyonrails.orgで: もっとRuby on Rails

アクションビューヘルパー

このガイドを読み終えると、以下のことがわかります:

1 アクションビューが提供するヘルパーの概要

WIP: ここにはすべてのヘルパーがリストされていません。完全なリストについてはAPIドキュメントを参照してください。

以下は、アクションビューで利用可能なヘルパーの概要です。詳細についてはAPIドキュメントを確認することをおすすめしますが、これは良い出発点となるでしょう。

1.1 AssetTagHelper

このモジュールは、ビューを画像、JavaScriptファイル、スタイルシート、フィードなどのアセットにリンクするためのHTMLを生成するためのメソッドを提供します。

デフォルトでは、Railsはこれらのアセットを現在のホストのpublicフォルダからリンクしますが、config.asset_hostをアプリケーションの設定(通常はconfig/environments/production.rb)で設定することで、専用のアセットサーバーからのリンクを指定することもできます。たとえば、アセットホストがassets.example.comの場合:

config.asset_host = "assets.example.com"
image_tag("rails.png")
# => <img src="http://assets.example.com/images/rails.png" />

ブラウザやフィードリーダーがRSS、Atom、またはJSONフィードを自動検出するために使用できるリンクタグを返します。

auto_discovery_link_tag(:rss, "http://www.example.com/feed.rss", { title: "RSS Feed" })
# => <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="http://www.example.com/feed.rss" />

1.1.2 image_path

app/assets/imagesディレクトリ内の画像アセットへのパスを計算します。ドキュメントルートからの完全なパスはそのまま渡されます。image_tag内部で使用され、画像パスを構築します。

image_path("edit.png") # => /assets/edit.png

config.assets.digestがtrueに設定されている場合、ファイル名にフィンガープリントが追加されます。

image_path("edit.png")
# => /assets/edit-2d1a2db63fc738690021fedb5a65b68e.png

1.1.3 image_url

app/assets/imagesディレクトリ内の画像アセットへのURLを計算します。これは内部的にimage_pathを呼び出し、現在のホストまたはアセットホストと結合します。

image_url("edit.png") # => http://www.example.com/assets/edit.png

1.1.4 image_tag

ソースに対するHTMLイメージタグを返します。ソースはフルパスまたはapp/assets/imagesディレクトリに存在するファイルです。

image_tag("icon.png") # => <img src="/assets/icon.png" />

1.1.5 javascript_include_tag

指定されたソースごとにHTMLスクリプトタグを返します。現在のページに含めるために、app/assets/javascriptsディレクトリに存在するJavaScriptファイルのファイル名(.js拡張子はオプション)を渡すか、ドキュメントルートに対する相対パスを渡すことができます。

javascript_include_tag "common"
# => <script src="/assets/common.js"></script>

1.1.6 javascript_path

app/assets/javascriptsディレクトリ内のJavaScriptアセットへのパスを計算します。ソースのファイル名に拡張子がない場合、.jsが追加されます。ドキュメントルートからの完全なパスはそのまま渡されます。javascript_include_tag内部で使用され、スクリプトパスを構築します。

javascript_path "common" # => /assets/common.js

1.1.7 javascript_url

app/assets/javascriptsディレクトリ内のJavaScriptアセットへのURLを計算します。これは内部的にjavascript_pathを呼び出し、現在のホストまたはアセットホストと結合します。

javascript_url "common"
# => http://www.example.com/assets/common.js

引数として指定されたソースに対するスタイルシートリンクタグを返します。拡張子を指定しない場合、.cssが自動的に追加されます。

stylesheet_link_tag "application"
# => <link href="/assets/application.css" rel="stylesheet" />

1.1.9 stylesheet_path

app/assets/stylesheetsディレクトリ内のスタイルシートアセットへのパスを計算します。ソースのファイル名に拡張子がない場合、.cssが追加されます。ドキュメントルートからの完全なパスはそのまま渡されます。stylesheet_link_tag内部で使用され、スタイルシートパスを構築します。

stylesheet_path "application" # => /assets/application.css

1.1.10 stylesheet_url

app/assets/stylesheetsディレクトリ内のスタイルシートアセットへのURLを計算します。これは内部的にstylesheet_pathを呼び出し、現在のホストまたはアセットホストと結合します。

stylesheet_url "application"
# => http://www.example.com/assets/application.css

1.2 AtomFeedHelper

1.2.1 atom_feed

このヘルパーを使用すると、Atomフィードの構築が簡単になります。以下は完全な使用例です:

config/routes.rb

resources :articles

app/controllers/articles_controller.rb

def index
  @articles = Article.all

  respond_to do |format|
    format.html
    format.atom
  end
end

app/views/articles/index.atom.builder

atom_feed do |feed|
  feed.title("Articles Index")
  feed.updated(@articles.first.created_at)

  @articles.each do |article|
    feed.entry(article) do |entry|
      entry.title(article.title)
      entry.content(article.body, type: 'html')

      entry.author do |author|
        author.name(article.author_name)
      end
    end
  end
end

1.3 BenchmarkHelper

1.3.1 benchmark

テンプレート内のブロックの実行時間を測定し、その結果をログに記録することができます。このブロックを高コストな操作やボトルネックの可能性がある箇所にラップして、操作の時間を測定します。 html+erb <% ベンチマーク "データファイルの処理" do %> <%= expensive_files_operation %> <% end %>

これにより、ログに「データファイルの処理(0.34523)」のようなものが追加され、コードの最適化時にタイミングを比較するために使用できます。

1.4 CacheHelper

1.4.1 cache

アクションやページ全体ではなく、ビューの一部をキャッシュするためのメソッドです。メニューやニューストピックのリスト、静的なHTMLフラグメントなどの一部をキャッシュするのに便利なテクニックです。このメソッドは、キャッシュするコンテンツを含むブロックを受け取ります。詳細については、AbstractController::Caching::Fragmentsを参照してください。

<% cache do %>
  <%= render "shared/footer" %>
<% end %>

1.5 CaptureHelper

1.5.1 capture

captureメソッドを使用すると、テンプレートの一部を変数に抽出することができます。その後、この変数をテンプレートやレイアウトのどこでも使用できます。

<% @greeting = capture do %>
  <p>Welcome! The date and time is <%= Time.now %></p>
<% end %>

抽出された変数は他の場所でも使用できます。

<html>
  <head>
    <title>Welcome!</title>
  </head>
  <body>
    <%= @greeting %>
  </body>
</html>

1.5.2 content_for

content_forを呼び出すと、マークアップのブロックを識別子に保存します。その後、yieldに識別子を引数として渡すことで、他のテンプレートやレイアウトで保存されたコンテンツに対して後続の呼び出しを行うことができます。

たとえば、標準のアプリケーションレイアウトと、他のサイトが必要としない特別なページがあるとします。content_forを使用して、この特別なページにJavaScriptを含めることができますが、他のサイトを肥大化させることはありません。

app/views/layouts/application.html.erb

<html>
  <head>
    <title>Welcome!</title>
    <%= yield :special_script %>
  </head>
  <body>
    <p>Welcome! The date and time is <%= Time.now %></p>
  </body>
</html>

app/views/articles/special.html.erb

<p>This is a special page.</p>

<% content_for :special_script do %>
  <script>alert('Hello!')</script>
<% end %>

1.6 DateHelper

1.6.1 distance_of_time_in_words

2つのTimeまたはDateオブジェクトまたは整数(秒単位)間の時間のおおよその距離を報告します。include_secondsをtrueに設定すると、詳細な近似値を取得できます。

distance_of_time_in_words(Time.now, Time.now + 15.seconds)
# => less than a minute
distance_of_time_in_words(Time.now, Time.now + 15.seconds, include_seconds: true)
# => less than 20 seconds

1.6.2 time_ago_in_words

distance_of_time_in_wordsと同様ですが、to_timeTime.nowに固定されています。

time_ago_in_words(3.minutes.from_now) # => 3 minutes

1.7 DebugHelper

オブジェクトをYAMLでダンプしたpreタグを返します。これにより、オブジェクトを視覚的に検査するための非常に読みやすい方法が作成されます。

my_hash = { 'first' => 1, 'second' => 'two', 'third' => [1, 2, 3] }
debug(my_hash)
<pre class='debug_dump'>---
first: 1
second: two
third:
- 1
- 2
- 3
</pre>

1.8 FormHelper

フォームヘルパーは、モデルを使用する場合に、標準のHTML要素だけを使用するよりも、モデルとの作業を簡単にするための一連のメソッドを提供します。このヘルパーは、フォームのHTMLを生成し、各種の入力(テキスト、パスワード、セレクトなど)に対してメソッドを提供します。フォームが送信されると(つまり、ユーザーが送信ボタンをクリックするか、JavaScript経由でform.submitが呼び出されると)、フォームの入力はparamsオブジェクトにまとめられ、コントローラに渡されます。

フォームヘルパーについては、Action View Form Helpers Guideを参照してください。

1.9 JavaScriptHelper

ビューでJavaScriptを使用するための機能を提供します。

1.9.1 escape_javascript

JavaScriptセグメントのキャリッジリターンとシングルクォート、ダブルクォートをエスケープします。

1.9.2 javascript_tag

提供されたコードをラップするJavaScriptタグを返します。

javascript_tag "alert('All is good')"
<script>
//<![CDATA[
alert('All is good')
//]]>
</script>

1.10 NumberHelper

数値をフォーマットされた文字列に変換するためのメソッドを提供します。電話番号、通貨、パーセンテージ、精度、位置表記、ファイルサイズに対してメソッドが提供されています。

1.10.1 number_to_currency

数値を通貨の文字列(例:$13.65)にフォーマットします。

number_to_currency(1234567890.50) # => $1,234,567,890.50

1.10.2 number_to_human

数値をユーザーが読みやすい形式に整形(フォーマットと近似値)します。非常に大きな数値に便利です。

number_to_human(1234)    # => 1.23 Thousand
number_to_human(1234567) # => 1.23 Million

1.10.3 number_to_human_size

サイズのバイトをより理解しやすい表現にフォーマットします。ユーザーにファイルサイズを報告するのに便利です。

number_to_human_size(1234)    # => 1.21 KB
number_to_human_size(1234567) # => 1.18 MB

1.10.4 number_to_percentage

数値をパーセンテージの文字列にフォーマットします。 ruby number_to_percentage(100, precision: 0) # => 100%

1.10.5 number_to_phone

電話番号をフォーマットします(デフォルトは米国)。

number_to_phone(1235551234) # => 123-555-1234

1.10.6 number_with_delimiter

デリミタを使用して、数値をグループ化された桁区切りでフォーマットします。

number_with_delimiter(12345678) # => 12,345,678

1.10.7 number_with_precision

指定された precision レベルで数値をフォーマットします。デフォルトは3です。

number_with_precision(111.2345)               # => 111.235
number_with_precision(111.2345, precision: 2) # => 111.23

1.11 SanitizeHelper

SanitizeHelperモジュールは、テキストから望ましくないHTML要素を取り除くための一連のメソッドを提供します。

1.11.1 sanitize

このsanitizeヘルパーは、すべてのタグをHTMLエンコードし、特に許可されていない属性をすべて削除します。

sanitize @article.body

attributesオプションまたはtagsオプションのいずれかが渡された場合、指定された属性とタグのみが許可され、それ以外は許可されません。

sanitize @article.body, tags: %w(table tr td), attributes: %w(id class style)

デフォルトを複数回使用するためにデフォルトを変更するには、例えばデフォルトにtableタグを追加する場合:

class Application < Rails::Application
  config.action_view.sanitized_allowed_tags = 'table', 'tr', 'td'
end

1.11.2 sanitize_css(style)

CSSコードのブロックをサニタイズします。

テキストからすべてのリンクタグを削除し、リンクテキストのみを残します。

strip_links('<a href="https://rubyonrails.org">Ruby on Rails</a>')
# => Ruby on Rails
strip_links('emails to <a href="mailto:[email protected]">[email protected]</a>.')
# => emails to [email protected].
strip_links('Blog: <a href="http://myblog.com/">Visit</a>.')
# => Blog: Visit.

1.11.4 strip_tags(html)

コメントを含むHTMLタグをすべて削除します。この機能はrails-html-sanitizer gemによって提供されます。

strip_tags("Strip <i>these</i> tags!")
# => Strip these tags!
strip_tags("<b>Bold</b> no more!  <a href='more.html'>See more</a>")
# => Bold no more!  See more

注:出力にはまだエスケープされていない '<', '>', '&' 文字が含まれる可能性があり、ブラウザを混乱させることがあります。

1.12 UrlHelper

ルーティングサブシステムに依存するリンクを作成し、URLを取得するためのメソッドを提供します。

1.12.1 url_for

提供された options のセットに対するURLを返します。

1.12.1.1 例
url_for @profile
# => /profiles/1

url_for [ @hotel, @booking, page: 2, line: 3 ]
# => /hotels/1/bookings/1?line=3&page=2

内部的には url_for から派生したURLへのリンクを作成します。主にRESTfulリソースリンクを作成するために使用されます。この例では、モデルを link_to に渡すことで実現されます。

link_to "Profile", @profile
# => <a href="/profiles/1">Profile</a>

リンク先が名前パラメータに収まらない場合、ブロックを使用することもできます。 ERBの例:

<%= link_to @profile do %>
  <strong><%= @profile.name %></strong> -- <span>Check it out!</span>
<% end %>

次のように出力されます:

<a href="/profiles/1">
  <strong>David</strong> -- <span>Check it out!</span>
</a>

詳細については、APIドキュメントを参照してください

1.12.3 button_to

渡されたURLに送信するフォームを生成します。フォームには name の値を持つ送信ボタンがあります。

1.12.3.1 例
<%= button_to "Sign in", sign_in_path %>

おおよそ次のような出力になります:

<form method="post" action="/sessions" class="button_to">
  <input type="submit" value="Sign in" />
</form>

詳細については、APIドキュメントを参照してください

1.13 CsrfHelper

クロスサイトリクエストフォージリプロテクションパラメータとトークンの名前を持つメタタグ "csrf-param" と "csrf-token" を返します。

<%= csrf_meta_tags %>

注意:通常のフォームでは、隠しフィールドが生成されるため、これらのタグは使用されません。詳細については、Railsセキュリティガイドを参照してください。

フィードバック

このガイドの品質向上にご協力ください。

タイポや事実の誤りを見つけた場合は、ぜひ貢献してください。 開始するには、ドキュメントへの貢献セクションを読んでください。

不完全なコンテンツや最新でない情報も見つかるかもしれません。 メインのドキュメントに不足しているドキュメントを追加してください。 修正済みかどうかは、まずEdge Guidesを確認してください。 スタイルと規約については、Ruby on Rails Guides Guidelinesを確認してください。

修正すべき点を見つけたが、自分で修正できない場合は、 問題を報告してください

そして最後に、Ruby on Railsのドキュメントに関するあらゆる議論は、公式のRuby on Railsフォーラムで大歓迎です。