【Rails】findとfind_byと404エラーとnilと劇的な見せ方をされた知識って忘れそうにない、という話
こんにちは、たわらです。
Railsには似たようなクラスメソッドがあります。
find
とかfind_by
とか。
で、その違いは何なのかなーと勉強していて、
RUNTEQというプログラミングスクールのコミュニティのSlackにて
「find
とfind_by
って該当オブジェクトがない場合の挙動が違うんだ、、、」
と自分のTimesにつぶやいてみると、颯爽と先輩卒業生が現れて、、、
とある日
ボク「find
とfind_by
って該当オブジェクトがない場合の挙動が違うんだ、、、」
先輩「find
は例外起こす。find_by
はnil
を返す」
ボク「(なんて速さのレスなんだ、、、)」
ボク「んー、なるほどそうなんですね、、、」
【そして次の瞬間】
先輩「ほれ」
先輩「なっ!」
先輩「んで、ActiveRecord::RecordNotFound
はRailsでは404
で処理するんじゃ」
ボク「な、なるほどー!」
何かすごく頭に残る
このやりとりでfind
は例外でfind_by
はnil
を返す、そしてその例外を404エラーで補足する、ということが頭にするするっと入りました。たぶん忘れないだろうな、と思いました。
なんでかなーと考えると、、、
・びっくりしたから
チャットでのやりとりだったので、急にコンソールの画像が出てきて反射的にびっくりしました。油断してたというか。
もうひとつ、わざわざ手元で実行してスクショまで取ってくれたんだ、ありがたい、というびっくりもありました。
・実行前と実行後の結果がわかりやすい
こうやって実行前のメソッドと実行結果をさくっと見せられると思わず納得してしまいますね。find
は例外でfind_by
はnil
なんだ、と。
・アハ体験?
例外補足についてはカリキュラムで学習したのですがそれほど理解できていませんでした。なんとなーくもやもやしたカタチで頭に残っていました。
その状態で、
「ActiveRecord::RecordNotFound
はRailsでは404
で処理するんじゃ」
と言われて頭のなかの知識の整理ができたように感じました。あ、そういうことだったのか!という喜びに似た感覚がありました。
・抽象化できた
これは未確認なので話半分ですが、
「ActiveRecord::RecordNotFound
はRailsでは404
で処理するんじゃ」
これって「特定のフレームワークは特定のエラーをHTTPステータスコードに結びつけている」ということですよね。たぶん。
なので、別のフレームワークは別の仕方で定義したエラーを、任意のHTTPステータスに紐づけている、ということだと予想できます。
フレームワークのエラーとHTTPステータスはフレームワーク固有の結びつきをしている、っぽいと1段階 抽象的に考えることができました。
おそらくこの4つくらいが重ね合わさって、「何かすごく頭に残る」と思ったのかなーと。
最後に
誰かと技術の話をするってこういういい感じのことが起きるんですね。恥ずかしがらずにコミュニケーションするって大事です。
ちなみに、この先輩は
の人です。気になる方はフォローしてみてください。
(了)