Controllerについて その3(render)


少し日が空きましたが、今日はrenderとredirext_toについて記事にしようと思います。

- render

まず始めにビュー内でもrenderが使われます。コントローラ内とは用途が少し違うみたいなので、今回はコントローラ内で使われる、renderメソッドについて書いていきます。


~ 主な役割 ~

  1. 同じコントローラ内の別のアクションのビューを表示できる。 例
def index
  @products = Users.all
  render action: :new
end

他のコントローラからのビューを表示したい時はrender template: "index"というようにtemplateオプションを利用する。


2. ビュー以外の表示 例

def hello
  render html: "Hello, World!"
end

htmlを直接表示しています。


~ errorについて ~
二度レンダリングを行おうとするとDoubleRenderErrorが発生します。 例えば、

def index
    render :text => 'Hello'
    render :new
  end
end

テキストhelloを表示してから、newアクションに飛ぶのですが、こうするとDoubleRenderErrorとブラウザに表示されます。



~ renderとredirect_toの違い ~
ここはまだまだ曖昧な部分もあるのですが、renderは同じHTTPリクエストのなかで処理をして、redirect_toはブラウザがredirect_toの後のリンクやパス先にリクエストを新たに送ることだと考えています。おそらくrails serverを見れば両者の違いが分かりやすくなるので、後日そのログをブログで紹介したいと思います。