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