📱
devise(gem)で出てくる respond_withメソッドって何者?
respond_withとの遭遇
アプリに認証機能入れようと思って、定番と呼ばれているdeviseを導入したものの、かなりブラックボックスだったもんで、ドキュメント読みに行ったり、ソースコード覗きながら理解しようと努めていました。
会員登録の際にどのような挙動になっているか
registrations_controller.rbファイルを覗きに行ってました。
そこで見かけたrespond_with
!!
見たことないし、検索してもいまいちはっきりと答えが探せませんでした。
誰が定義したメソッドで、どうゆうものなのかが気になったので、すこーしだけ調べました。
そもそも
元々はrailsによって定義されたメソッドだったらしいのですが、
Rails 4.2のリリースノートにて、respond_with
メソッドはrails本体のメソッドでは無くなったそうです。
参考)
そんでもって、respondersというgemにその機能が移植される形になったそうです。
devise gemと依存性があるため、deviseを入れた際に勝手にインストールされて、勝手に使えるようになっています。
そんで何してるの?
公式なドキュメントが残ってないので、いまいち理解しきれてませんが、jsonやらhtmlやらcontent-typeに合わせてレスポンスするためのメソッドだったという記述がチラチラ見かけました。
一応、respondersのgemに定義がされている部分がありました。
とりあえず、deviseの理解をするために
devise gemを読み解く上で,最低限読み解く上での挙動以下になりそうです。
respond_withの挙動
- アクションに対応するテンプレートを探して表示する
- テンプレートが無い場合
A. GETアクセスだったらテンプレートが見つからないエラーを返す
B. GETアクセス以外だったら
I. validation のエラーがあれば編集(もしくは新規)画面をrender する
II. validation のエラーが無ければリダイレクト(locationパラメータで指定可能)
つまり、
def create
if
redirect_to xxxx
else
render xxx
end
end
と条件分岐を必要がないってこと。らしい。
参考にした記事)
Discussion