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
render
のnothing
オプションのところで挙げた例は以下のように書ける。
head 404
まとめ
render
の万能感見習いたい。