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か空配列であっても自然である。