light log

学んだこととか

Railsでレスポンスを返すメソッドについての簡単勉強メモ

勉強メモ。

Railsでレスポンスを返すためのメソッドについて本読んだので簡単にまとめておく。

本ばかり読んでいるのにもいい加減飽きてきたので、この章(コントローラの章)だけざっと読んだら何か簡単に動くものでも自分で作ってみようと思う。

以下について簡単にまとめる。

  • render
  • redirect_to
  • head

render

一番汎用的でよく使うことになるやつ。引数の渡し方で挙動がいろいろ変化する。

アクション内で明示的にレスポンスを返すメソッドを呼ばなかったときも、暗黙的にrenderが呼ばれて、アクションと名前で対応付けられたテンプレートが実行される。

別の名前のテンプレートを使う

名前で対応付けられたデフォルトのテンプレート以外を指定したいときは、そのテンプレート名を指定する。

render action: 'index'

別のコントローラ配下のテンプレートを使う

コントローラ名とテンプレート名を指定する。

render template: 'other/index'

アプリケーション外のテンプレートを使う

絶対パスでテンプレートを指定する。

render file: 'path/to/template'

上記の省略形

上記3つはいずれも以下のように書ける。

render 'index'
render 'other/index'
render 'path/to/template'

パスの形や内容で自動判別してくれるんだろうけど、なんか分かりにくい気がする。(特に2つ目と3つ目)

本にも書いてあるけど、1つ目と2つ目は省略形を使って、3つ目はfile:を明示するのがシンプルさと可読性のバランスがいいように思える。

文字列を出力する

以下で直接文字列を出力できる。ただし結果はtext/plainではなくtext/html

render text: 'hello world'

インラインテンプレートを使う

ERBテンプレートを使える。

render inline: '<%= @foo %>'

空のコンテンツを出力する

以下のとおり。

render nothing: true, status: 404

redirect_to

redirect_to 'http://xxxxxxxxx'
redirect_to action: :index
redirect_to controller: :cntlr, action: :index
redirect_to :back

head

rendernothingオプションのところで挙げた例は以下のように書ける。

head 404

まとめ

renderの万能感見習いたい。