find と find_by の違い と 補足
概要
User のレコードに、存在しない session[:id] を find, find_by したとき
User.find(999) #=> ActiveRecord::RecordNotFound User.find_by(id: 999) #=> nil
になる。
ファインダ find
id などの主キーに find する、ということは 目的のレコードが存在するという期待がある。
逆を突けば、find して失敗するならば異常系であり、raise を起こすべきである、というのがフレームワーク設計思想。
find(5) #=> 主キー id=5 があるはずだ(expect) #=> 無いなら例外
条件を使って検索するファインダ
where など User.where(name: 'mat7ukawa7)
こういったファインダは結果が得られることに、あらかじめ確信は無い。
従って、結果セットが空、返り値がnilか空配列であっても自然である。