[rails]find_byでもActiveRecord::RecordNotFoundをraiseしたい
ActiveRecordでfindメソッドに存在しないidを渡すとActiveRecord::RecordNotFound exceptionがraiseされます。
id = 9999 # 存在しないID
Hoge.find(id) # => ActiveRecord::RecordNotFound
rails4から使えるようになったメソッドで、条件指定で1件レコードを取得できるfind_byがありますが、こちらは該当データが存在しなかった場合は例外ではなくnilが返って来ます。
id = 9999 # 存在しないID
Hoge.find_by(id: id) # => nil
「find_byでもActiveRecord::RecordNotFound exceptionをraiseしたいな」と思いながらきちんと調べてなかったのですが、こういう場合はfind_by!メソッドを使えばよかったのですね。
id = 9999 # 存在しないID
Hoge.find_by!(id: id) # => ActiveRecord::RecordNotFound
わざわざ
hoge = Hoge.find_by(id: id)
raise ActiveRecord::RecordNotFound unless hoge
と書かなくてもいいのでスッキリしますね。