diff --git a/guides/source/ja/action_view_overview.md b/guides/source/ja/action_view_overview.md index 73ac60b790..d2494c26d7 100644 --- a/guides/source/ja/action_view_overview.md +++ b/guides/source/ja/action_view_overview.md @@ -14,18 +14,24 @@ Action View の概要 Action Viewについて -------------------- -RailsにおけるWebリクエストは、[Action Controller](action_controller_overview.html)とAction Viewで扱われます。通常、Action Controllerは、データベースとのやりとりや、必要に応じたCRUD(Create/Read/Update/Delete)アクションの実行に関与します。Action View はその後レスポンスを実際のWebページにまとめる役割を担います。 +Action Viewは、[MVC][]のVに相当し、 [Action Controller](action_controller_overview.html)と連携してWebリクエストを処理します。Action Controllerは(MVCにおける)モデル層とのやりとりやデータの取得を担当し、次にAction Viewがそのデータを利用してWebリクエストに対するレスポンスのbody(本文)をレンダリングします。 -Action Viewのテンプレートは、HTMLタグの間にERB(Embedded Ruby)を含む形式で書かれます。ビューテンプレートがコードの繰り返しでうずまって乱雑になるのを避けるために、フォーム・日付・文字列に対して共通の動作を提供するヘルパークラスが多数用意されています。アプリケーションの機能向上に応じて独自のヘルパーを追加することも簡単にできます。 +デフォルトのAction Viewテンプレート(単に「ビュー」とも呼ばれます)は、HTMLドキュメント内にRubyコードを記述可能にするERB(Embedded Ruby)で記述します。 -NOTE: Action Viewの一部の機能はActive Recordと結びついていますが、Action ViewがActive Recordに依存しているわけではありません。Action Viewは独立したパッケージであり、任意のRubyライブラリと組み合わせて利用できます。 +Action Viewには、「フォーム」「日付」「文字列」用のHTMLタグを動的に生成する[ヘルパー](#helpers)メソッドが多数用意されています。必要であれば、アプリケーションに独自のヘルパーを追加することも可能です。 + +NOTE: Action Viewでは、コードを簡潔に書けるようにするためにActive Modelの[`to_param`][]メソッドや[`to_partial_path`][]メソッドを利用しています。ただし、Action ViewがActive Recordに依存しているわけではありません。Action Viewは独立したパッケージであり、任意のRubyライブラリと組み合わせて利用できます。 + +[MVC]: https://ja.wikipedia.org/wiki/Model_View_Controller +[`to_param`]: https://api.rubyonrails.org/classes/ActiveModel/Conversion.html#method-i-to_param +[`to_partial_path`]: https://api.rubyonrails.org/classes/ActiveModel/Conversion.html#method-i-to_partial_path Action ViewをRailsで使う ---------------------------- -アプリケーションの`app/views`ディレクトリには、1つのコントローラごとに1つのディレクトリが作成され、そこにビューテンプレートファイルが置かれます。このビューテンプレートはそのコントローラと関連付けられています。これらのファイルは、コントローラ内にあるアクションごとにレンダリング(画面への出力)された結果をビューで表示するために使われます。 +Action Viewテンプレート(別名「ビュー」)は、`app/views`ディレクトリ内のサブディレクトリに保存されます。ここには、コントローラーごとに、コントローラと同じ名前のサブディレクトリがあります。そのサブディレクトリ内にビューファイルが置かれ、コントローラーのアクションへのレスポンスとして特定のビューをレンダリングするします。 -scaffoldでリソースを生成するときに、Railsがデフォルトでどんなことを行なうのか見てみましょう。 +たとえば、scaffoldで`article`リソースを生成すると、`app/views/articles`ディレクトリに以下のファイルが生成されます。 ```bash $ bin/rails generate scaffold article @@ -42,20 +48,25 @@ $ bin/rails generate scaffold article [...] ``` -Railsのビューには命名規則があります。上で生成されたファイルを見るとわかるように、ビューテンプレートファイルは基本的にコントローラのアクションと関連付けられています。 -たとえば、`articles_controller.rb`コントローラのindexアクションは、`app/views/articles`ディレクトリの`index.html.erb`を使います。 +生成されるファイル名はRailsの命名規約に沿って、対応するコントローラーのアクション名がビューファイル名に取り入れられます(`index`アクションに対応する`index.html.erb`や、`edit`アクションに対応する`edit.html.erb`など)。 -これらのERBファイルに、それらをラップするレイアウトテンプレートや、ビューから参照されるあらゆるパーシャル(部分テンプレート)を組み合わせることで完全なHTMLが生成され、クライアントに送信されます。この後、本ガイドではこれらの3つの要素について詳しく説明します。 +この命名規約が守られていれば、Railsがコントローラーのアクションを実行し終わったときに、ユーザーが指定しなくても、そのアクションに対応するビューを自動的に探索してレンダリングします。たとえば、`articles_controller.rb`の`index`アクションを実行すると、`app/views/articles/`ディレクトリ内の`index.html.erb`ビューを自動的にレンダリングします。そのためには、ファイル名と置き場所の両方が規約に沿っていることが重要です。 -前述のとおり、Railsがレンダリングする最終的なHTMLは「テンプレート」「パーシャル」「レイアウト」の3つの要素から構成されます。 -これらについて簡単に説明します。 +クライアント(ブラウザ)に返される最終的なHTMLは、「ERB」ファイル(拡張子は`.html.erb`)、それをラップする「レイアウトテンプレート」、ERBファイルが参照するすべての「パーシャル」ファイル(部分テンプレートとも)の組み合わせで構成されます。本ガイドでは、この後「テンプレート」、「パーシャル」、「レイアウト」という3つのコンポーネントについてそれぞれ詳しく説明します。 テンプレート --------- -Action Viewのテンプレートはさまざまな方法で記述できます。テンプレートの拡張子が`.erb`であれば、ERB(Rubyのコードはここに含まれます)とHTMLを記述します。テンプレートの拡張子が`.builder`であれば、`Builder::XmlMarkup`ライブラリが使われます。 +Action Viewテンプレートは、さまざまなフォーマットで記述できます。 +テンプレートファイルの拡張子が`.erb`の場合は、HTMLレスポンスのビルドにERBが使われます。 +テンプレートファイルの拡張子が`.jbuilder`の場合は、JSONレスポンスのビルドに[Jbuilder][] gemが使われます。 +テンプレートファイルの拡張子が`.builder`の場合は、XMLレスポンスのビルドに[`Builder::XmlMarkup`][]ライブラリが使われます。 + +Railsは、複数のテンプレートシステムをファイル拡張子で区別します。 +たとえば、ERBテンプレートシステムを用いるHTMLファイルのファイル拡張子は`.html.erb`、Jbuilderテンプレートシステムを用いるJSONファイルのファイル拡張子は`.json.jbuilder`になります。他のテンプレートライブラリを利用すると、これ以外のテンプレート種別やファイル拡張子も追加される場合があります。 -Railsでは複数のテンプレートシステムがサポートされており、テンプレートファイルの拡張子で区別されます。たとえば、ERBテンプレートシステムを使うHTMLファイルの拡張子は`.html.erb`になります。 +[Jbuilder]: https://github.com/rails/jbuilder +[`Builder::XmlMarkup`]: https://github.com/rails/builder ### ERB @@ -65,27 +76,71 @@ ERBテンプレートの内部では、`<% %>`タグや`<%= %>`タグの中にRu 以下は、名前をレンダリングするためのループです。 +ERBテンプレートは、`<% %>`や`<%= %>`などの特殊なERBタグを利用して、Rubyコードを静的HTML内に埋め込む形で記述する方法です。 + +拡張子が`.html.erb`であるERBビューテンプレートをRailsが処理すると、ERB内のRubyコードが評価され、ERBタグを動的な出力に置き換えます。生成された動的コンテンツは静的なHTMLマークアップと結合されて、最終的なHTMLレスポンスが完成します。 + +ERBテンプレート内には、`<% %>`タグや`<%= %>`タグでRubyコードを記述できます。 +`<% %>`タグ(`=`を含まない)は、実行結果を出力せずにRubyコードを実行したい場合に使います(条件やループなど)。 +`<%= %>`タグ(`=`を含む)は、Rubyコードの実行結果を出力してテンプレート内でレンダリングしたい場合に使います(以下のコード例の`person.name`モデル属性など)。 + ```html+erb -