ビューとレンダリング
レスポンスを返します。
「ビューとレンダリング」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。
ビューとは
ビューは、クライアントに送信するレスポンス(通常はHTML)を生成するテンプレートです。コントローラーが準備したデータをページに変換します。
- ビューは
app/viewsに配置します。 app/views/articlesのように、コントローラーごとにまとめられます。- デフォルトのテンプレート名はアクション名と一致します。
規約に基づくレンダリング
デフォルトでは、アクションはアクション名と同じ名前のテンプレートをレンダリングします。ArticlesController の index アクションは、明示的な render 呼び出しなしで app/views/articles/index.html.erb をレンダリングします。
def index
@articles = Article.all
# automatically renders articles/index.html.erb
endERBテンプレート
デフォルトのテンプレート言語はERB(Embedded Ruby)です。HTMLとRubyを組み合わせて記述します:
<%= ... %>は値を出力します。<% ... %>は出力せずにコードを実行します。
<h1>Articles</h1>
<% @articles.each do |article| %>
<p><%= article.title %></p>
<% end %>レイアウト
レイアウトは、ヘッダー、ナビゲーション、フッターなどの共通マークアップで各ビューを囲みます。デフォルトの app/views/layouts/application.html.erb には <%= yield %> が含まれており、そこにアクションのビューが挿入されます。
<!-- application.html.erb -->
<html>
<body>
<%= yield %>
</body>
</html>パーシャル
パーシャルは、ファイル名がアンダースコアで始まる再利用可能なテンプレートの断片です。render でレンダリングすると、マークアップの重複を避けられます。
<!-- _article.html.erb -->
<p><%= article.title %></p>
<!-- in index.html.erb -->
<%= render "article", article: @article %>コレクションのレンダリング
コレクションを render に渡すと、各項目につき1回ずつパーシャルがレンダリングされます。これは慣用的で便利な短縮記法です。Railsはモデルからパーシャル名を推測します。
<%= render @articles %>
<!-- renders _article.html.erb for each article -->ビューのヘルパー
Railsには、HTMLを安全に生成するヘルパーが用意されています。リンクには link_to、フォームには form_with、画像には image_tag を使用します。これにより、テンプレートを簡潔で一貫したものに保てます。
<%= link_to "View", article_path(@article) %>
<%= image_tag "logo.png" %>その他の形式でレスポンスを返す
コントローラーはHTML以外の形式も返せます。render json: はAPI向けにJSONを送信し、respond_to はクライアントが要求した形式に応じて異なる形式を提供します。
def show
@article = Article.find(params[:id])
render json: @article
endrespond_to ブロック
respond_to を使うと、1つのアクションで複数の形式を処理できます。同じアクションから、ブラウザーにはHTMLを、APIクライアントにはJSONを返せます。
def show
@article = Article.find(params[:id])
respond_to do |format|
format.html
format.json { render json: @article }
end
endステータスコード
status: を使ってレスポンスのHTTPステータスを設定します。:ok(200)は成功時、:created(201)は作成に成功した後、:unprocessable_entity(422)はバリデーションに失敗したときに使用し、クライアントが正しく反応できるようにします。
render :new, status: :unprocessable_entity
render json: @article, status: :createdエスケープと安全性
ERBは <%= %> の出力を自動的にHTMLエスケープします。これにより、ユーザーデータによるクロスサイトスクリプティングを防止できます。内容を完全に信頼できる場合に限り、raw や html_safe で安全なコンテンツとして扱ってください。誤って使用すると、XSSの脆弱性を再び招きます。
理解度チェック
ビューとレンダリングについての理解度を確認します。
まとめ:ビューとレンダリング
レスポンスを返す方法を学びました:
- アクションは規約に従って対応するERBビューをレンダリングします。
- レイアウトはビューを囲み、パーシャルは断片を再利用します。
link_toやform_withなどのヘルパーでHTMLを構築します。render json:とrespond_toでAPIを提供し、適切なステータスコードを設定します。- ERBは出力をエスケープしてXSSを防ぎます。
これでコントローラーとルーティングのコースは完了です。
よくある質問
「ビューとレンダリング」レッスンは無料ですか?
はい。「ビューとレンダリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。
「ビューとレンダリング」で何を学びますか?
レスポンスを返します。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ruby Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「ビューとレンダリング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このRuby Academyレッスンでコードを書いて実行できますか?
はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ルートとリソース
- コントローラーとアクション
- Strong Parameters
- ビューとレンダリング