ActiveRecord::RecordNotFound
Ruby on Railsでデータベースから指定したIDのレコードが見つからない場合のエラー
概要
Ruby on RailsでActiveRecordのfind等を使用して存在しないレコードを取得しようとした場合に発生するエラーです。
エラーメッセージ
ActiveRecord::RecordNotFound: Couldn't find User with 'id'=999
原因
- 存在しないIDを指定: 削除済みまたは存在しないIDでfindを実行
- 関連レコードが存在しない: belongs_toの関連先が見つからない
- スコープ条件で除外されている: デフォルトスコープ等で対象外になっている
解決策
1. find_by を使用(nilを返す)
| |
2. find_by! を使用(例外を発生)
| |
3. rescue で例外処理
| |
4. rescue_from で共通処理
| |
5. where + first を使用
| |
よくある間違い
- URLパラメータの検証なしにfindを実行
- 論理削除(soft delete)されたレコードへのアクセス
- マルチテナントアプリでスコープ外のレコードにアクセス
Ruby の他のエラー
この記事は役に立ちましたか?