tawara's blog

雑記。個人の見解です。

【Rails】findとfind_byと404エラーとnilと劇的な見せ方をされた知識って忘れそうにない、という話

こんにちは、たわらです。

Railsには似たようなクラスメソッドがあります。

findとかfind_byとか。

で、その違いは何なのかなーと勉強していて、

RUNTEQというプログラミングスクールのコミュニティのSlackにて

findfind_byって該当オブジェクトがない場合の挙動が違うんだ、、、」

と自分のTimesにつぶやいてみると、颯爽と先輩卒業生が現れて、、、

とある日

ボク「findfind_byって該当オブジェクトがない場合の挙動が違うんだ、、、」

先輩「findは例外起こす。find_bynilを返す」

ボク「(なんて速さのレスなんだ、、、)」

ボク「んー、なるほどそうなんですね、、、」

【そして次の瞬間】

先輩「ほれ」

Image from Gyazo

先輩「なっ!」

先輩「んで、ActiveRecord::RecordNotFoundRailsでは404で処理するんじゃ」

ボク「な、なるほどー!」

railsguides.jp

何かすごく頭に残る

このやりとりでfindは例外でfind_bynilを返す、そしてその例外を404エラーで補足する、ということが頭にするするっと入りました。たぶん忘れないだろうな、と思いました。

なんでかなーと考えると、、、

・びっくりしたから

チャットでのやりとりだったので、急にコンソールの画像が出てきて反射的にびっくりしました。油断してたというか。

もうひとつ、わざわざ手元で実行してスクショまで取ってくれたんだ、ありがたい、というびっくりもありました。

・実行前と実行後の結果がわかりやすい

こうやって実行前のメソッドと実行結果をさくっと見せられると思わず納得してしまいますね。findは例外でfind_bynilなんだ、と。

・アハ体験?

例外補足についてはカリキュラムで学習したのですがそれほど理解できていませんでした。なんとなーくもやもやしたカタチで頭に残っていました。

その状態で、

ActiveRecord::RecordNotFoundRailsでは404で処理するんじゃ」

と言われて頭のなかの知識の整理ができたように感じました。あ、そういうことだったのか!という喜びに似た感覚がありました。

・抽象化できた

これは未確認なので話半分ですが、

ActiveRecord::RecordNotFoundRailsでは404で処理するんじゃ」

これって「特定のフレームワークは特定のエラーをHTTPステータスコードに結びつけている」ということですよね。たぶん。

なので、別のフレームワークは別の仕方で定義したエラーを、任意のHTTPステータスに紐づけている、ということだと予想できます。

フレームワークのエラーとHTTPステータスはフレームワーク固有の結びつきをしている、っぽいと1段階 抽象的に考えることができました。

おそらくこの4つくらいが重ね合わさって、「何かすごく頭に残る」と思ったのかなーと。

最後に

誰かと技術の話をするってこういういい感じのことが起きるんですね。恥ずかしがらずにコミュニケーションするって大事です。

ちなみに、この先輩は

twitter.com

の人です。気になる方はフォローしてみてください。

(了)