Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

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を呼び出します createindexは実行されません メソッド。

なぜそれが重要なのですか?

そのビューのインスタンス変数は設定されないためです!

自分で設定する必要があります。

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アプリケーションを作成するのに役立ちます。

今度はあなたの番です。エディターを開いて、コーディングスキルを練習してください。

読んでくれてありがとう!


  1. トロイの木馬マルウェアとは?究極のガイド

    トロイの木馬 (馬) とは? トロイの木馬マルウェアは、正当で安全に見えるが、実際にはマルウェアであるファイル、プログラム、またはコードの一部です .トロイの木馬は正規のソフトウェアにパッケージ化されて配信されます (名前の由来です)。多くの場合、被害者をスパイしたり、データを盗んだりするように設計されています。多くのトロイの木馬は、インストール後に追加のマルウェアもダウンロードします。 トロイの木馬の名前はトロイの木馬に由来します ギリシャの叙事詩イリアスで。 物語の中で、ギリシャの英雄オデュッセウスは、彼の敵であるトロイア人が彼らの街に贈り物として受け取る巨大な木製の馬を作る計画を立て

  2. Mac上のAndroidメッセージの究極のガイド

    Mac 上の Android メッセージ ?不可能に聞こえますよね? 2 つのブランド間の競争が激しいため、ほとんどの人は Android と Mac は連携しないと考えています。ただし、Google は会話をユーザーにとって便利で柔軟なものにしたいと考えているため、Android Messages を開発しました。 このメッセージング プラットフォームは、PC デバイスと Mac デバイスの両方で使用できます。したがって、Mac コンピューターをお持ちの場合は、使用するのが難しくないので心配する必要はありません。 Android メッセージは複数のデバイスで互換性があるため、さまざま