Railsのlink_to
、redirect_to
、render
の主な違いについて混乱しています。誰でも説明してください。
link_toはビューで使用され、リンクのHTMLコードを生成します
<%= link_to "Google", "http://google.com" %>
これにより、ビューに次のHTMLが生成されます
<a href="http://google.com">Google</a>
redirect_toおよびrenderは、リクエストに応答するためにコントローラーで使用されます。コントローラーに追加した場合、redirect_toはリクエストを新しいURLにリダイレクトするだけです。
redirect_to "http://google.com"
あなたのページにアクセスする人は誰でも効果的にGoogleにリダイレクトされます
renderはさまざまな方法で使用できますが、主にHTMLビューをレンダリングするために使用されます。
render "article/show"
これにより、ビュー「app/views/article/show.html.erb」がレンダリングされます
次のリンクで、redirect_toとrenderメソッドについて詳しく説明します http://guides.rubyonrails.org/layouts_and_rendering.html
Documentation から:
ビューのレンダリングとリクエストのリダイレクトについて
。 。 。 renderは、Rails応答の構築に使用するビュー(または他のアセット)を指示します。redirect_toメソッドは、まったく異なる処理を実行します。ブラウザーに、異なるURLの新しいリクエストを送信するよう指示します。
ビューのレンダリングについて
。 。 。 render:actionはターゲットアクションでコードを実行しません。 。 。
リクエストのリダイレクトについて
。 。 。コードは実行を停止し、ブラウザへの新しいリクエストを待ちます。 HTTP 302ステータスコードを送り返すことで、ブラウザが次にどのようなリクエストを行う必要があるかを伝えたことがあるだけです。
基本的に:
link_toは、通常ビューで使用されるURLを生成するヘルパーメソッドです(。html.erbファイル)
renderは、データを(たとえば、フォームから)次のコントローラアクションに渡さずにビューをレンダリングするようにコントローラに指示します。
redirect_toは、302ページのリダイレクトを行い、データ(たとえば、フォームから)をWebアプリのコントローラーアクションまたは外部アプリ(ex :グーグル、フェイスブック、好きなウェブ記事など)
link_to
は、ERBテンプレートで使用するためのものです。特定のパスまたはURLへのリンクを出力します。
redirect_to
はコントローラーで使用するためのものです。コントローラーメソッドが終了すると、クライアントは指定されたパスまたはURLを要求します。
render
はコントローラーで使用するためのものでもあります。 Railsで指定されたテンプレートをレンダリングします。
redirect_to
とrender
は、特定のコントローラーメソッドで1回だけ呼び出すことができます。
私は実際に これについてブログ投稿を書いただけです 。最も重要なビットを以下にコピーします(変更あり)。
render
対_redirect_to
_render
および_redirect_to
_は、コントローラーアクションが終了する2つの方法です(一般的に言えば)。それらがどのように機能するかを理解するために、Railsアプリでコントローラーが行うことを確認しましょう。
GET /books/index.html
_)books GET /books/index(.:format) books#index
)この最後のステップは、render
または_redirect_to
_、または省略した場合は暗黙的にを呼び出すと明示的に発生します。
あれは、
_def index
@books = Book.all
end
_
と同じです
_def index
@books = Book.all
render :index
end
_
_render :index
_は、「準備したデータ(_@books = Book.all
_)を_books/index.html.erb
_ビューテンプレートと組み合わせて完全なHTMLドキュメントを生成し、それをに送り返しますクライアント。」
_redirect_to @book
_は、「プロセス全体を最初からやり直すようクライアントに伝え、url_for(@book)
に新しいGET
リクエストを発行します.
両方を省略すると、アクションは、アクション自体と同じ名前のテンプレートをレンダリングします。つまり、必要なビューテンプレートがレンダリング元のアクションと一致しない場合にのみ、render
を明示的に呼び出す必要があります。
すべてのコントローラーアクションに対応するビューテンプレートがあるとは限らないことに注意してください。一般に、_#create
_、_#update
_、および_#destroy
_(すべて非GET
HTTPリクエストにルーティングされる)は、データベースに変更を加えてから、_redirect_to
_いくつかのリソース(成功した場合)またはその前のフォームをre _render
し、エラー(失敗した場合)とともに。
公式ガイドが説明しているように (私の強調)、
これらの2つのメソッド[
render
および_redirect_to
_]は、アクションコントローラーで使用される2つの基本的なアクションアーキタイプを表します:Get-and-showおよびdo-and-redirect。ほとんどのアクションは、これらのテーマのバリエーションです。
render
対_link_to
_render
は、ビューテンプレート内でも使用されます。完全なHTMLドキュメントを生成するのではなく、パーシャルビューテンプレートを大きなドキュメントに挿入するために使用されます。これがその結果です。
_nav.html.erb
_)。render 'nav'
_パーシャル同じフォルダにあるビューからを含める場合は、__nav.html.erb
_を使用します。render 'shared/nav'
_ プロジェクト内の任意のビューからに含める場合は、_app/views/shared/_nav.html.erb
_を使用します。_link_to
_は、アンカータグ(_a href
_タグ)をビューテンプレートに挿入するための便利な方法です。リンク先のURLの多くはアプリケーション内の他のページであり、これらのURLは次のようにオブジェクトまたは「ヘルパーメソッド」を使用して参照できるため、これは便利です。
_= link_to 'Back', books_path # renders as <a href="/books">Back</a>
= link_to 'View', @book # renders as <a href="/book/1">View</a> or similar
_
A link_to
はRails内のフォームで使用され、html内にリンク要素を作成するためのヘルパーです。他の2つはフォームでは使用されず、コントローラーで使用されます。
コントローラメソッドがそのページにリンクされている場合は、そのページをrender
します。例えば。 「new」を呼び出すと、「new item」ページがレンダリングされます。彼らはちょうどされたばかりの要求を満たします。
redirect
はまさにそのために使用されます-リダイレクト。たとえば、ログインする必要があるページにアクセスしようとすると、ユーザーはログインページにリダイレクトされます。したがって、リダイレクトは基本的に新しいリクエストを生成します。
link_toは標準のHTMLアンカーを出力します=リンク (link_to documentation)
redirect_toは、更新や削除などのページ応答に一般的に使用されます。それはあなたがそれを与えるパラメータを取り、あなたのページを適切に導きます。 ((redirect_to documentation)
renderは、パーシャルのロードや特定の.erbファイルのロードに使用されます。 (render documentation)
this Railsガイドにはたくさんの例があります。これはレンダーとredirect_toを説明するはずです。link_toはレンダリングとredirect_toとはかなり異なります
Link_toは、HTMLに表示される特定のURLへのハイパーリンクを作成します。
Redirect_toは、特定のオプションに応じて、リンク先を決定します。たとえば、誰かがユーザーとしてログオンしている場合は、そのユーザーに設定ページを表示し、そうでない場合はリダイレクトページにリダイレクトすることができます。
レンダーは、チャンク全体を受信者に送信する前に、レンダリングされたファイルを開き、そのコンテンツを取得して既存のファイルに貼り付けます。
私が正しいと思います。
公式から Railsガイド :
ご覧のように、レンダーはRailsどのビュー(または他のアセット)を使用して応答を作成するかを指示します。redirect_toメソッドは、まったく異なることを行います。ブラウザに新しいリクエストを送信するように指示します別のURL。