Railsレンダリングの究極のガイド
Railsでのレンダリングは何ですか?
レンダリングは、RubyonRailsアプリケーションの究極の目標です。ビューをレンダリングします。通常は.html.erb
HMTLコードとRubyコードが混在するファイル。
ビューはユーザーに表示されるものです 。
これは、Railsアプリが実行する必要のあるすべての作業の結果です。ビューは、ロジック、データ、ビューテンプレートを組み合わせて、ユーザーのリクエストに対応します。
JSON応答を返すことでさえ、ビューと見なすことができます。
そのため、できることすべてを学ぶ Railsのレンダリングシステムについては重要 すべての作業を無駄にしたくない場合。
Railsでレンダリングすると、驚くべき動作が発生する可能性があります。ですから、よく知っているほど良いのです。
基本から始めましょう!
ビューレンダリングの基本
デフォルトでは、Railsに何かをレンダリングするように指示する必要はありません。他のすべてが正しく設定されている限り、ビューは引き続き機能します。
これは「設定より規約」の一部です。
それはどのように機能しますか?
さて、Railsはあなたが気づいていないかもしれない仮定をします。
作業を節約できます。
しかし、何が起こっているのかわからない場合は、魔法のように感じるかもしれません。
そこで問題が発生する可能性があります!
この特定のケースでは、Railsが想定しているのは、リクエストを処理しているコントローラーアクションと同じ名前のテンプレートをレンダリングすることです。
したがって、BooksController#index
を呼び出すと …Railsはbooks/index.erb
をレンダリングします 。
今 :
このレンダリングをより細かく制御できます。
これにより、デフォルトとは異なるビューをレンダリングできます。
方法は次のとおりです :
class BooksController < ApplicationController def index render :listing end end
これにより、books/listing.erb
がレンダリングされます (または.haml
HAMLビューを使用している場合)
記号の代わりに文字列を使用できます。
このように :
render 'shared/buttons'
Railsはshared/buttons.erb
をレンダリングします 。
知っておくべきこと
別のアクションに関連付けられたビューをレンダリングしても、そのアクションは実行されません。
つまり、render :index
を呼び出します create
内 index
は実行されません メソッド。
なぜそれが重要なのですか?
そのビューのインスタンス変数は設定されないためです!
自分で設定する必要があります。
例 :
def index @users = User.all end # Missing `@users` here will result in an error or an empty index view # You can use `redirect_to` instead, in that case `index` will run def create render :index end
レンダリングにはこれ以上のものがあります。
続けましょう!
さまざまな種類のレンダリング
テンプレートをレンダリングする以外に、他のオプションがあります。
できます :
- HTML文字列をレンダリングする
- プレーンテキストの文字列をレンダリングする
- JSONをレンダリングする
エラーを処理するための適切なテンプレートがない場合、文字列のレンダリングは、開発中に何らかのエラーメッセージを表示するのに役立ちます。
または、特定のコントローラーアクションのビューをまだ作成する準備ができていない場合。
ここに例があります :
if @user render :show else render plain: "User not found." end
JSONを直接レンダリングすることで、単純なAPIを構築できます。これは最善のアプローチではありませんが、開始するのに役立ちます。
例 :
render json: @user
私はレンダリングHTMLを使用していませんが、使用に適している場合はお知らせください。
パーシャルをレンダリングする方法
レンダリングはコントローラーを超えています。
ビュー内にビューをレンダリングすることもできます 。
これをパーシャルと呼びます。
なぜそれをしたいのですか?
よりクリーンなコードとコードの再利用。
3つの異なるページで同じフォームを使用している場合は、部分的に抽出することをお勧めします。 。
これで、変更を加える場合は、1か所で行うだけで済みます。
ここに例があります :
<%= render :form %>
これを機能させるには、ビューファイルに_form.erb
のようにアンダースコアで始まる名前を付ける必要があります。 、ただし、render
を呼び出すと アンダースコアは必要ありません。
インスタンス変数にアクセスできるようになります パーシャルから...
しかし、ローカル変数はどうですか?
これを行うことができます :
<%= render :form, message: "Apples Are Good" %>
これにより、message
にアクセスできます パーシャルのローカル変数として。
次へ :
1つのrender
で複数のものをレンダリングする方法を学習します。 電話してください!
コレクションをレンダリングする方法
パーシャルは、ループなしでコレクションをレンダリングするのに役立ちます。
@books
をレンダリングしているとしましょう 。
これを行うことができます :
<%= render @books %>
これは、_book.erb
がある場合に機能します 部分的&book
を使用 そのテンプレート内の変数として。
例 :
# app/views/books/_book.erb <%= image_tag(book.cover) %><%= book.title %>
<%= book.author %> <%= link_to "Read Book", book %>
(CSSクラスの)現在の書籍番号が必要な場合は、book_counter
を使用できます。 。
book_
の場所 モデルの名前です。
コレクションのレンダリングは、私のお気に入りのRails機能の1つだと思います!
レールレイアウトについて
新しいRailsアプリを作成すると、viewsフォルダーの下に「layouts」フォルダーが付属します。
そこにapplication.html.erb
があります ファイル。
これがデフォルトのレイアウトです!
レイアウトとは何ですか?
レイアウトを使用すると、サイトに一貫した外観を与えることができます。
それは :
- メニュー
- フッター
- CSSおよびJavascriptファイルの読み込み...
ほとんどの場合、デフォルトのレイアウトで問題ありません。
しかし、特定のページに別のレイアウトが必要な場合はどうなりますか?
layout
を使用できます オプション。
例 :
render :index, layout: 'admin'
レイアウトを無効にすることができます :
render :index, layout: false
また、コントローラーレベルでレイアウトを設定できます。
このように :
class AdminsController < ApplicationController layout 'admin' end
レンダリングはアクションを終了しません
よくある混乱の1つは、コントローラーアクション内でのレンダリング(およびリダイレクト)により、その後のコードの実行が停止することです。
render
に電話すれば、これに連絡することができます 複数回。
例 :
def create if yellow_fruit? render :bananas end render :apples end
render :apples
であるため、これによりエラーが発生します 常に実行され、同じコントローラーアクションで2回レンダリングすることはできません。
解決策は次のとおりです :
def create if yellow_fruit? render :bananas else render :apples end end
別のオプションは、return
を使用することです。 render
の後のキーワード 、ただし、わかりやすくするために、メソッドの途中のreturn
は避けるのが最善です。 可能な限りステートメント。
概要
RubyonRailsでのレンダリングの非常に重要なトピックについて学習しました。
レンダリングを使用すると、アプリケーションのユーザーにコンテンツを返すことができます。これは、コントローラーアクション内の最後のステップの1つです。レンダリングを理解すると、より優れたRailsアプリケーションを作成するのに役立ちます。
今度はあなたの番です。エディターを開いて、コーディングスキルを練習してください。
読んでくれてありがとう!
-
トロイの木馬マルウェアとは?究極のガイド
トロイの木馬 (馬) とは? トロイの木馬マルウェアは、正当で安全に見えるが、実際にはマルウェアであるファイル、プログラム、またはコードの一部です .トロイの木馬は正規のソフトウェアにパッケージ化されて配信されます (名前の由来です)。多くの場合、被害者をスパイしたり、データを盗んだりするように設計されています。多くのトロイの木馬は、インストール後に追加のマルウェアもダウンロードします。 トロイの木馬の名前はトロイの木馬に由来します ギリシャの叙事詩イリアスで。 物語の中で、ギリシャの英雄オデュッセウスは、彼の敵であるトロイア人が彼らの街に贈り物として受け取る巨大な木製の馬を作る計画を立て
-
Mac上のAndroidメッセージの究極のガイド
Mac 上の Android メッセージ ?不可能に聞こえますよね? 2 つのブランド間の競争が激しいため、ほとんどの人は Android と Mac は連携しないと考えています。ただし、Google は会話をユーザーにとって便利で柔軟なものにしたいと考えているため、Android Messages を開発しました。 このメッセージング プラットフォームは、PC デバイスと Mac デバイスの両方で使用できます。したがって、Mac コンピューターをお持ちの場合は、使用するのが難しくないので心配する必要はありません。 Android メッセージは複数のデバイスで互換性があるため、さまざま