#findとfind_by(id:)
大した内容ではないけど知識に穴があったので自分用にメモ。
両方ともRecordをidで検索して結果を返すが、見つからなかった時の挙動が違う。
find
User.find(1000)
User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1000 LIMIT 1
=> ActiveRecord::RecordNotFound: Couldn't find User with 'id'=1000
ActiveRecord::RecordNotFound
が投げられる。
find_by(id:)
User.find_by(id: 1000)
User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1000 LIMIT 1
=> nil
nil
が返る。
システムの挙動として、Recordが見つからないことが織り込み済みの場合は find_by
を使って分岐か何かでnil
を処理する。見つからないのが異常なら find
を使ってエラーを投げて404ページを表示する。