139
127

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

render と redirect の違い

Last updated at Posted at 2017-06-02

はじめに

Ruby on Rails Tutorial をやっています。

rails の render と redirect の違いは言葉上では理解できるものの、腑に落ちていないと感じていたところ、この記事を教えてもらいました。railsのrenderとredirect_toの違い

上記を参考に MVC の流れに乗せてみたところ、少し「腑に落ちた」感がでてきたので書いてみます。

render

controller の action を実行した結果、何らかの view が決定され、レンダリングされます。
render.png

view は、以下のように決まります。

A. デフォルトの view を表示する場合

action で view を指定しない場合、規約に従って、リソース名 や action名を元に、表示する view が決まります。

例)controller/users_controller の show アクションの場合
=> view/users/show.html.erb がレンダリングされます。

B. 表示する view を指定する場合

render で明示的に view を指定すると、指定した view が表示されます。
例)

render 'show_follow'

create アクションの後に、show ページを表示したい場合など、view を変更したいケースは頻繁にあると思います。

redirect

redirect_to は、view の表示には直接は関係なく、新たな HttpRequest が発行されます。※GET のみ(下図の 4. )
新たな request が発行された後は下図の 5. 以降で、render の図の 2. 以降と同じです。

redirect.png

例)

redirect_to users_url

view の表示と直接は関係ないと書いたものの、redirect_to で呼び出せるのは GET のみであるため、実質的には、view を表示するために別の request を呼び出すといった使い方となると思います。
例えば、更新処理は私(create action)がやるから、その後の表示はあなた( users_url で呼び出される action )に任せた!という雰囲気でしょうか。

さいごに

図にしてみると、説明が腑に落ちるのと同時に、気づきもありました。

  • (当たり前ですが、)view を表示するためには、 render が必要です。(記述は省略できます)
  • 何をどこで render し、どのアクションで利用するのか( redirect するのか)交通整理が必要です。まあ、画面の遷移をちゃんとイメージしましょうということですね ^^;;
139
127
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
139
127

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?