このガイドの内容:
本ガイドでは、Action Viewで利用できるヘルパーのうち、最もよく使われるヘルパーの一部の概要を解説するにとどめています。本ガイドはヘルパー入門として提供されていますが、すべてのヘルパーについて詳しい説明が網羅されているAPIドキュメントも参照するのがオススメです。
これらのヘルパーは、日付や時刻の要素をコンテキストに応じて人間が読み取り可能な形式として表示するのに役立ちます。
distance_of_time_in_words
2つの「Time
オブジェクト」「Date
オブジェクト」「整数(秒)」同士のおおよそのインターバル(日時と日時の間隔)を英文で出力します。単位を詳細にしたい場合はinclude_seconds: true
を設定します。
distance_of_time_in_words(Time.current, 15.seconds.from_now) # => less than a minute distance_of_time_in_words(Time.current, 15.seconds.from_now, include_seconds: true) # => less than 20 seconds
上のサンプルコードでTime.now
ではなくTime.current
を使っている点にご注意ください。Time.current
はRailsアプリケーションに設定されているタイムゾーンに基づいた現在時刻を返しますが、Time.now
は(Railsアプリケーションではなく)サーバーのタイムゾーンに基づいた現在時刻を返します。
詳しくはdistance_of_time_in_words
APIドキュメントを参照してください。
time_ago_in_words
「Time
オブジェクト」「Date
オブジェクト」または「整数(秒)」と、Time.current
の間のおおよそのインターバル(日時と日時の間隔)を英文で出力します。
time_ago_in_words(3.minutes.from_now) # => 3 minutes
詳しくはtime_ago_in_words
APIドキュメントを参照してください。
数値を書式付き文字列に変換するさまざまなメソッドを提供します。「電話番号」「通貨」「パーセント」「精度」「桁区切り記号」「ファイルサイズ」用のメソッドが提供されます。
number_to_currency
数値を通貨表示の文字列にフォーマットします($13.65など)。
number_to_currency(1234567890.50) # => $1,234,567,890.50
詳しくはnumber_to_currency
APIドキュメントを参照してください。
number_to_human
数値を、人間が読みやすい形式(数詞を追加)で近似表示します。数値が非常に大きくなる可能性がある場合に便利です。
number_to_human(1234) # => 1.23 Thousand number_to_human(1234567) # => 1.23 Million
詳しくはnumber_to_human
APIドキュメントを参照してください。
number_to_human_size
バイト単位の数値を、KBやMBなどのわかりやすい単位でフォーマットします。ファイルサイズを表示する場合に便利です。
number_to_human_size(1234) # => 1.21 KB number_to_human_size(1234567) # => 1.18 MB
詳しくはnumber_to_human_size
APIドキュメントを参照してください。
number_to_percentage
数値をパーセント形式の文字列にフォーマットします。
number_to_percentage(100, precision: 0) # => 100%
詳しくはnumber_to_percentage
APIドキュメントを参照してください。
number_to_phone
数値を電話番号形式にフォーマットします(デフォルトは米国の電話番号形式)。
number_to_phone(1235551234) # => 123-555-1234
詳しくはnumber_to_phone
APIドキュメントを参照してください。
number_with_delimiter
数値を区切り文字で3桁ずつグループ化します。
number_with_delimiter(12345678) # => 12,345,678
詳しくはnumber_with_delimiter
APIドキュメントを参照してください。
number_with_precision
数値の小数点以下の精度(表示を丸める位置)をprecision
で指定できます(デフォルトは3)。
number_with_precision(111.2345) # => 111.235 number_with_precision(111.2345, precision: 2) # => 111.23
詳しくはnumber_with_precision
APIドキュメントを参照してください。
文字列のフィルタリング、フォーマット、変換を行うメソッドを提供します。
excerpt
excerpt
ヘルパーにtext
(第1引数)とphrase
(第2引数)を渡すと、phrase
で指定したものが最初に出現する位置を中心に、前後のテキストをradius
オプションで指定した単語の数だけtext
から抜粋します。抽出したテキストの冒頭や末尾がtext
の冒頭や末尾と異なる場合は、省略記号...
が追加されます。
excerpt("This is a very beautiful morning", "very", separator: " ", radius: 1) # => ...a very beautiful... excerpt("This is also an example", "an", radius: 8, omission: "<chop> ") #=> <chop> is also an example
詳しくはexcerpt
APIドキュメントを参照してください。
pluralize
英単語の単数形または複数形を、指定の数値に応じて返します。
pluralize(1, "person") # => 1 person pluralize(2, "person") # => 2 people pluralize(3, "person", plural: "users") # => 3 users
詳しくはpluralize
APIドキュメントを参照してください。
truncate
text
(第1引数)に渡したテキストを、length
オプションで指定した長さに切り詰めます。テキストが切り詰められた場合は、length
オプションで指定した長さを超えないように省略記号...
が追加されます。
truncate("Once upon a time in a world far far away") # => "Once upon a time in a world..." truncate("Once upon a time in a world far far away", length: 17) # => "Once upon a ti..." truncate("one-two-three-four-five", length: 20, separator: "-") # => "one-two-three..." truncate("And they found that many people were sleeping better.", length: 25, omission: "... (continued)") # => "And they f... (continued)" truncate("<p>Once upon a time in a world far far away</p>", escape: false) # => "<p>Once upon a time in a wo..."
詳しくはtruncate
APIドキュメントを参照してください。
word_wrap
line_width
オプションで指定した幅に収まるようにテキストを改行します。
word_wrap("Once upon a time", line_width: 8) # => "Once\nupon a\ntime"
詳しくはword_wrap
APIドキュメントを参照してください。
フォームヘルパーを利用すると、HTML要素だけでフォームを作成するよりもモデルの扱いがシンプルになります。フォームヘルパーは、モデルに基づいたフォーム生成に特化しており、ユーザー入力の種類(テキストフィールド、パスワードフィールド、ドロップダウンボックスなど)に応じたさまざまなメソッドを提供します。フォームが送信されると、フォームへの入力がparams
オブジェクトにまとめられてコントローラに送信されます。
フォームヘルパーについて詳しくは、Action View フォームヘルパーガイドを参照してください。
ルーティングサブシステムに依存する形でリンクやURLをビルドするための一連のメソッドです。
button_to
渡されたURLに送信するフォームを生成します。このフォームには、name
の値がボタン名となる送信ボタンが表示されます。
<%= button_to "Sign in", sign_in_path %>
上は以下のようなフォームを生成します。
<form method="post" action="/sessions" class="button_to"> <input type="submit" value="Sign in" /> </form>
詳しくはbutton_to
APIドキュメントを参照してください。
current_page?
このヘルパーに渡したオプションが現在のリクエストURLと一致する場合はtrue
を返します。
<% if current_page?(controller: 'profiles', action: 'show') %> <strong>Currently on the profile page</strong> <% end %>
詳しくはcurrent_page?
APIドキュメントを参照してください。
link_to
内部でurl_for
から導出したURLへのリンクを生成します。link_to
は、RESTfulリソースのリンクを作成するために用いるのが一般的で、特にモデルを引数としてlink_to
に渡すときに多用されます。
link_to "Profile", @profile # => <a href="/profiles/1">Profile</a> link_to "Book", @book # 複合主キー[:author_id, :id]を渡した場合 # => <a href="/books/2_1">Book</a> link_to "Profiles", profiles_path # => <a href="/profiles">Profiles</a> link_to nil, "https://example.com" # => <a href="https://example.com">https://example.com</a> link_to "Articles", articles_path, id: "articles", class: "article__container" # => <a href="/articles" class="article__container" id="articles">Articles</a>
以下のようにブロックを渡すと、リンクの表示名をname
パラメーターと異なるものにできます。
<%= link_to @profile do %> <strong><%= @profile.name %></strong> -- <span>Check it out!</span> <% end %>
上のコードで以下のようなHTMLが出力されます。
<a href="/profiles/1"> <strong>David</strong> -- <span>Check it out!</span> </a>
詳しくはlink_to
APIドキュメントを参照してください。
mail_to
指定したメールアドレスへのmailto
リンクタグを生成します。リンクテキスト、追加のHTMLオプション、メールアドレスをエンコードするかどうかも指定できます。
mail_to "john_doe@gmail.com" # => <a href="mailto:john_doe@gmail.com">john_doe@gmail.com</a> mail_to "me@john_doe.com", cc: "me@jane_doe.com", subject: "This is an example email" # => <a href="mailto:"me@john_doe.com?cc=me@jane_doe.com&subject=This%20is%20an%20example%20email">"me@john_doe.com</a>
詳しくはmail_to
APIドキュメントを参照してください。
url_for
options
で渡した一連のオプションに対応するURLを返します。
url_for @profile # => /profiles/1 url_for [ @hotel, @booking, page: 2, line: 3 ] # => /hotels/1/bookings/1?line=3&page=2 url_for @post # 複合主キー[:blog_id, :id]を渡した場合 # => /posts/1_2
望ましくないHTML要素をテキストから除去するための一連のメソッドです。サニタイズヘルパーは、安全で有効なHTML/CSSだけをレンダリングするときに特に有用です。また、サニタイズヘルパーはXSS(クロスサイトスクリプティング)攻撃を防ぐうえでも有用で、ユーザー入力に含まれる可能性のある危険なコンテンツを、ビューで表示する前にエスケープまたは削除します。
サニタイズヘルパーは、内部でrails-html-sanitizer gemを利用しています。
sanitize
sanitize
ヘルパーは、すべてのHTMLタグをエンコードし、許可されていない属性をすべて削除します。
sanitize @article.body
:attributes
オプションと:tags
オプションのいずれかを渡すと、オプションで指定した属性またはタグだけが許可されます(つまり除去されません)。それ以外の属性やタグは除去されます。
sanitize @article.body, tags: %w(table tr td), attributes: %w(id class style)
よく使うオプションをデフォルト化するには、アプリケーション設定でオプションをデフォルトに追加します。以下はtable関連のタグを追加した場合の例です。
# config/application.rb class Application < Rails::Application config.action_view.sanitized_allowed_tags = %w(table tr td) end
詳しくはsanitize
APIドキュメントを参照してください。
sanitize_css
CSSのコードブロックをサニタイズします(特にHTMLコンテンツ内にスタイル属性が含まれている場合)。sanitize_css
は、ユーザー入力から生成されたコンテンツや、スタイル属性を含む動的コンテンツを扱う場合に特に役立ちます。
以下のsanitize_css
メソッドは、許可されていないCSSスタイルを削除します。
sanitize_css("background-color: red; color: white; font-size: 16px;")
詳しくはsanitize_css
APIドキュメントを参照してください。
strip_links
テキストに含まれるリンクタグを削除し、リンクテキストだけを残します。
strip_links("<a href='https://rubyonrails.org'>Ruby on Rails</a>") # => Ruby on Rails strip_links("emails to <a href='mailto:me@email.com'>me@email.com</a>.") # => emails to me@email.com. strip_links("Blog: <a href='http://myblog.com/'>Visit</a>.") # => Blog: Visit.
詳しくはstrip_links
APIドキュメントを参照してください。
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 strip_links('<<a href="https://example.org">malformed & link</a>') # => <malformed & link
詳しくはstrip_tags
APIドキュメントを参照してください。
アセットヘルパーは、ビューから「画像」「JavaScriptファイル」「スタイルシート(CSS)」「フィード」などのアセットにリンクするHTMLを生成する一連のヘルパーメソッドを提供します。
デフォルトでは、現在のホストのpublic/
フォルダにあるアセットにリンクされますが、アプリケーション設定のconfig.asset_host
を設定すれば、アセット専用サーバー上にあるアセットに直接リンクできます(この設定は、通常config/environments/production.rb
に記述します)。
たとえば、アセットがassets.example.com
というホストに置かれている場合は、以下のように設定します。
config.asset_host = "assets.example.com"
これで、設定に対応するURLがimage_tag
で生成されるようになります。
image_tag("rails.png") # => <img src="//assets.example.com/images/rails.png" />
audio_tag
単独のソースURL文字列を渡すと単一のsrc
タグを含むHTML audio
タグを生成し、複数のソースURL文字列を渡すと複数のsrc
タグを含むaudio
タグを生成します。sources
オプションには、フルパス、公開しているオーディオディレクトリ内のファイル、またはActive Storageの添付ファイルを指定できます。
audio_tag("sound") # => <audio src="/audios/sound"></audio> audio_tag("sound.wav", "sound.mid") # => <audio><source src="/audios/sound.wav" /><source src="/audios/sound.mid" /></audio> audio_tag("sound", controls: true) # => <audio controls="controls" src="/audios/sound"></audio>
audio_tag
の内部では、AssetUrlHelper
のaudio_path
を用いてオーディオファイルへのパスをビルドしています。
詳しくはaudio_tag
APIドキュメントを参照してください。
auto_discovery_link_tag
ブラウザやRSSフィードリーダーが「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" />
詳しくはauto_discovery_link_tag
APIドキュメントを参照してください。
favicon_link_tag
アセットパイプラインによって管理されるファビコンのリンクタグを返します。source
には、フルパス、またはアセットディレクトリに存在するファイルを指定できます。
favicon_link_tag # => <link href="/assets/favicon.ico" rel="icon" type="image/x-icon" />
詳しくはfavicon_link_tag
APIドキュメントを参照してください。
image_tag
指定されたソースに対応するHTMLのimg
タグを返します。ソースには、フルパス、またはアプリのapp/assets/images
ディレクトリの下に存在するファイルを指定できます。
image_tag("icon.png") # => <img src="/assets/icon.png" /> image_tag("icon.png", size: "16x10", alt: "Edit Article") # => <img src="/assets/icon.png" width="16" height="10" alt="Edit Article" />
image_tag
の内部では、AssetUrlHelper
のimage_path
を用いて画像ファイルへのパスをビルドしています。
詳しくはimage_tag
APIドキュメントを参照してください。
javascript_include_tag
指定されたソースごとにHTMLのscript
タグを返します。app/assets/javascripts
ディレクトリの下に存在するJavaScriptファイル名(拡張子.js
はオプションなので指定しなくてもよい)を渡すことも、ドキュメントルートからの相対的な完全パスを渡すことも可能です。
javascript_include_tag("common") # => <script src="/assets/common.js"></script> javascript_include_tag("common", async: true) # => <script src="/assets/common.js" async="async"></script>
async
やdefer
などがオプションとしてよく指定されます。async: true
を指定すると、ドキュメントと並行してスクリプトファイルを読み込むことでスクリプトをできるだけ早い段階で解析して評価します。defer: true
を指定すると、ドキュメントの解析後にスクリプトを実行するようブラウザに指示します。
javascript_include_tag
の内部では、AssetUrlHelper
のjavascript_path
を用いてスクリプトファイルへのパスをビルドしています。
詳しくはjavascript_include_tag
APIドキュメントを参照してください。
picture_tag
ソースに対応するHTMLの<picture>
タグを返します。String、Array、またはブロックを渡せます。
picture_tag("icon.webp", "icon.png")
上のコードは以下のHTMLを生成します。
<picture> <source srcset="/assets/icon.webp" type="image/webp" /> <source srcset="/assets/icon.png" type="image/png" /> <img src="/assets/icon.png" /> </picture>
詳しくはpicture_tag
APIドキュメントを参照してください。
preload_link_tag
ブラウザでソースをプリロードさせるのに利用できるHTML link
タグを返します。指定できるソースは、アセットパイプラインによって管理されるリソースパス、フルパス、またはURIです。
preload_link_tag("application.css") # => <link rel="preload" href="/assets/application.css" as="style" type="text/css" />
詳しくはpreload_link_tag
APIドキュメントを参照してください。
stylesheet_link_tag
引数で指定したソースに対応するスタイルシート用リンクタグを返します。拡張子が指定されていない場合は、自動的に.css
が追加されます。
stylesheet_link_tag("application") # => <link href="/assets/application.css" rel="stylesheet" /> stylesheet_link_tag("application", media: "all") # => <link href="/assets/application.css" media="all" rel="stylesheet" />
media
オプションは、リンクのメディアタイプを指定するのに使われます。最もよく使われるメディアタイプはall
、screen
、print
、speech
です。
stylesheet_link_tag
の内部では、AssetUrlHelper
のstylesheet_path
を用いてスタイルシートへのパスをビルドしています。
詳しくはstylesheet_link_tag
APIドキュメントを参照してください。
video_tag
単独のソースURL文字列を渡すと単一のsrc
タグを含むHTML video
タグを生成し、複数のソースURL文字列を渡すと複数のsrc
タグを含むvideo
タグを生成します。sources
オプションには、フルパス、公開している動画ディレクトリ内のファイル、またはActive Storageの添付ファイルを指定できます。
video_tag("trailer") # => <video src="/videos/trailer"></video> video_tag(["trailer.ogg", "trailer.flv"]) # => <video><source src="/videos/trailer.ogg" /><source src="/videos/trailer.flv" /></video> video_tag("trailer", controls: true) # => <video controls="controls" src="/videos/trailer"></video>
video_tag
の内部では、AssetUrlHelper
のvideo_path
を用いて動画ファイルへのパスをビルドしています。
詳しくはvideo_tag
APIドキュメントを参照してください。
ビューでJavaScriptを利用するための機能を提供する一連のヘルパーメソッドです。
escape_javascript
JavaScriptセグメントでキャリッジリターンや一重引用符や二重引用符をエスケープします。ブラウザが解析するときに無効な文字が含まれないようにしたいときは、このヘルパーメソッドにテキストの文字列を渡します。
たとえば、二重引用符が挨拶文に含まれている以下のようなパーシャルをJavaScriptのアラートボックスで表示したい場合は、以下のように書くことで二重引用符をエスケープできます。
<%# app/views/users/greeting.html.erb %> My name is <%= current_user.name %>, and I'm here to say "Welcome to our website!"
<script> var greeting = "<%= escape_javascript render('users/greeting') %>"; alert(`Hello, ${greeting}`); </script>
これで、二重引用符が正しくエスケープされ、アラートボックスに挨拶文が表示されます。
詳しくはescape_javascript
APIドキュメントを参照してください。
javascript_tag
渡されたコードをJavaScriptタグでラップして返します。オプションをハッシュ形式で渡すことで、<script>
タグの振る舞いを制御できます。
javascript_tag("alert('All is good')", type: "application/javascript")
<script type="application/javascript"> //<![CDATA[ alert('All is good') //]]> </script>
コンテンツを引数に渡す代わりに、以下のようにブロックで渡すことも可能です。
<%= javascript_tag type: "application/javascript" do %> alert("Welcome to my app!") <% end %>
詳しくはjavascript_tag
APIドキュメントを参照してください。
HTMLタグをプログラム的に生成するための一連のヘルパーメソッドです。
tag
HTMLタグ名やオプションを指定してHTMLタグを生成します。
以下の書式であらゆるHTMLタグを生成できます。`
tag.タグ名(追加コンテンツ, オプション)
br
、div
、section
、article
など任意のタグ名を指定できます。
以下はよく使われる例です。
tag.h1 "All titles fit to print" # => <h1>All titles fit to print</h1> tag.div "Hello, world!" # => <div>Hello, world!</div>
また、生成するタグには以下のようにオプションで属性も指定できます。
tag.section class: %w( kitties puppies ) # => <section class="kitties puppies"></section>
さらに、tag
ヘルパーにdata
オプションを指定するときは、サブ属性のキーバリューペアを含むハッシュを渡すことでHTMLのdata-*
属性を複数追加できます。JavaScriptで適切に動作させるため、指定したサブ属性名に含まれるアンダースコア_
を以下のように-
に置き換えてからdata-*
属性に変換します。
tag.div data: { user_id: 123 } # => <div data-user-id="123"></div>
詳しくはtag
APIドキュメントを参照してください(訳注: tag
ヘルパーで生成されるタグはHTML5に準拠しており、閉じタグの自動追加やコンテンツのブロック渡しなどもサポートしています)。
token_list
引数で渡したトークンをスペース区切りの文字列にして返します。このヘルパーメソッドは、CSSクラス名を生成するclass_names
メソッドのエイリアスです。
token_list("cats", "dogs") # => "cats dogs" token_list(nil, false, 123, "", "foo", { bar: true }) # => "123 foo bar" mobile, alignment = true, "center" token_list("flex items-#{alignment}", "flex-col": mobile) # => "flex items-center flex-col" class_names("flex items-#{alignment}", "flex-col": mobile) # エイリアス # => "flex items-center flex-col"
生成されるマークアップの一部を抽出して、テンプレートやレイアウトファイルで他の部分で利用可能にする一連のヘルパーメソッドです。
マークアップのブロックを変数にキャプチャするcapture
メソッドと、マークアップのブロックをキャプチャしてレイアウトで利用可能にするcontent_for
メソッドが提供されています。
capture
capture
メソッドを使うと、以下のようにテンプレートの一部を抽出して変数にキャプチャできます。
<% @greeting = capture do %> <p>Welcome to my shiny new web page! The date and time is <%= Time.current %></p> <% end %>
この@greeting
変数は、任意のテンプレートやレイアウトやヘルパーで利用可能になります。
<html> <head> <title>Welcome!</title> </head> <body> <%= @greeting %> </body> </html>
キャプチャの戻り値は、そのブロックによって生成された文字列になります。
@greeting # => "Welcome to my shiny new web page! The date and time is 2018-09-06 11:09:16 -0500"
詳しくはcapture
APIドキュメントを参照してください。
content_for
content_for
を呼び出すとマークアップのブロックが識別子に保存され、この識別子を後で利用可能になります。他のテンプレートやヘルパーモジュールやレイアウトでyield
にこの識別子を引数として渡すことで、識別子に保存されているコンテンツを以後呼び出せるようになります。
content_for
は、content_for
ブロックでページのタイトルを設定するときによく使われます。
content_for
ブロックを以下のようにspecial_page.html.erb
ビューで定義しておいてから、それをレイアウト内でyield
する形で利用すると、content_for
ブロックを利用しない他のページではcontent_for
ブロックが生成されないようになります。
<%# app/views/users/special_page.html.erb %> <% content_for(:html_title) { "Special Page Title" } %>
<%# app/views/layouts/application.html.erb %> <html> <head> <title><%= content_for?(:html_title) ? yield(:html_title) : "Default Title" %></title> </head> </html>
上記の例では、content_for?
述語メソッドを利用してタイトルを条件付きでレンダリングしていることがわかります。このメソッドは、コンテンツがcontent_for
でキャプチャ済みかどうかをチェックして、ビューのコンテンツに応じてレイアウトの一部を調整しています。
さらに、content_for
は以下のようにヘルパーモジュール内でも利用できます。
# app/helpers/title_helper.rb module TitleHelper def html_title content_for(:html_title) || "Default Title" end end
これで、レイアウト内でhtml_title
を呼び出せば、content_for
ブロックに保存されたコンテンツを取得できるようになります。special_page
の場合のように、レンダリングされるページでcontent_for
ブロックが設定されている場合はタイトルが表示され、content_for
ブロックが設定されていない場合は、デフォルトの"Default Title"テキストが表示されます。
content_for
はキャッシュ内では無視されるので、フラグメントキャッシュされる要素ではcontent_for
を使わないでください。
capture
とcontent_for
の違いでお悩みの方へ。capture
はマークアップのブロックを変数にキャプチャするために使われ、content_for
は、マークアップのブロックを識別子に保存して後で利用可能にするの使われます(content_for
は実際には内部でcapture
を呼び出しています)。ただし両者の大きな違いは、複数回呼び出されたときの振る舞いにあります。content_for
は繰り返し呼び出すことが可能であり、特定の識別子用に受け取ったブロックを提供された順序で連結します。以後の個別の呼び出しは、既に保存済みのコンテンツに追加するだけで。対照的に、capture
はブロックのコンテンツのみを返すだけで、以前の呼び出しをトラッキングしません。
詳しくはcontent_for
APIドキュメントを参照してください。
benchmark
コストの高い操作やボトルネックの可能性がある操作をbenchmark
ブロックで囲むことでパフォーマンスを測定できます。
<% benchmark "Process data files" do %> <%= expensive_files_operation %> <% end %>
これによってログにProcess data files (0.34523)
のような出力が追加されるので、コードを最適化するときにタイミングを比較できるようになります。
benchmark
はActive Supportのメソッドなので、コントローラやヘルパーやモデルでも利用できます。
詳しくはbenchmark
APIドキュメントを参照してください。
cache
アクションやページ全体をキャッシュする代わりに、フラグメントキャッシュでビューの一部をキャッシュできます。フラグメントキャッシュは、メニュー、ニューストピックのリスト、静的なHTMLの断片といった小さな部分をキャッシュするのに有用です。これにより、キャッシュブロックで囲んだビューロジックのフラグメントが、次のリクエストが到着したときにキャッシュストアから配信されるようになります。
cache
メソッドは、キャッシュしたいコンテンツをブロックとして受け取ります。
たとえば、アプリケーションレイアウトのフッターをキャッシュするには、以下のようにcache
ブロックでフッターを囲みます。
<% cache do %> <%= render "application/footer" %> <% end %>
モデルのインスタンスに基づいてキャッシュすることも可能です。たとえば、以下のようにcache
メソッドにarticle
オブジェクトを渡すと、ページ上の個別の記事をキャッシュして、記事単位でキャッシュするようになります。
<% @articles.each do |article| %> <% cache article do %> <%= render article %> <% end %> <% end %>
アプリケーションがこのページへの最初のリクエストを受け取ると、以下のような一意のキーを持つ新しいキャッシュエントリがRailsによって書き込まれます。
views/articles/index:bea67108094918eeba32cd4a6f786301/articles/1
詳しくは、フラグメントキャッシュガイドやcache
APIドキュメントを参照してください。
atom_feed
Atomフィードは、コンテンツの配信に使われるXMLベースのファイル形式で、ユーザーがフィードリーダーアプリでコンテンツを参照したり、検索エンジンでサイトに関する追加情報を検索したりするのに利用されます。
atom_feed
ヘルパーを利用することで、Atomフィードを手軽に構築可能になります。主な利用場所はXMLを作成するBuilderテンプレートです。完全な利用例は以下のとおりです。
# 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
詳しくはatom_feed
APIドキュメントを参照してください。
debug
オブジェクトの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>
詳しくはdebug
APIドキュメントを参照してください。
Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。
原著における間違いを見つけたら『Rails のドキュメントに貢献する』を参考にしながらぜひ Rails コミュニティに貢献してみてください 🛠💨✨
本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。
Railsガイド運営チーム (@RailsGuidesJP)
Railsガイドは下記の協賛企業から継続的な支援を受けています。支援・協賛にご興味あれば協賛プランからお問い合わせいただけると嬉しいです。