はじめに
Ruby on Rails Tutorial をやっています。
rails の render と redirect の違いは言葉上では理解できるものの、腑に落ちていないと感じていたところ、この記事を教えてもらいました。railsのrenderとredirect_toの違い。
上記を参考に MVC の流れに乗せてみたところ、少し「腑に落ちた」感がでてきたので書いてみます。
render
controller の action を実行した結果、何らかの view が決定され、レンダリングされます。
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_to users_url
view の表示と直接は関係ないと書いたものの、redirect_to で呼び出せるのは GET のみであるため、実質的には、view を表示するために別の request を呼び出すといった使い方となると思います。
例えば、更新処理は私(create action)がやるから、その後の表示はあなた( users_url で呼び出される action )に任せた!という雰囲気でしょうか。
さいごに
図にしてみると、説明が腑に落ちるのと同時に、気づきもありました。
- (当たり前ですが、)view を表示するためには、 render が必要です。(記述は省略できます)
- 何をどこで render し、どのアクションで利用するのか( redirect するのか)交通整理が必要です。まあ、画面の遷移をちゃんとイメージしましょうということですね ^^;;