ホーム > Rails > ActiveRecord::RecordNotFound.

ActiveRecord::RecordNotFound. このエントリーを含むはてなブックマーク はてなブックマーク - ActiveRecord::RecordNotFound.

2007 年 8 月 15 日
>> User.find_by_login('foo')
=> nil
>> User.find(123)
ActiveRecord::RecordNotFound: Couldn't find User with ID=123
from /usr/local/ruby186/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1031:in `find_one'
from /usr/local/ruby186/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1014:in `find_from_ids'
from /usr/local/ruby186/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:419:in `find'
from (irb):7

レコードが見つからなかったときの挙動。
ActiveRecord::Base#find_by_*ではnilを返すのに、ActiveRecord::Base#findではActiveRecord::RecordNotFoundを投げてくるっていうのがどうも分からん。

Class: ActiveRecord::Base

RecordNotFound — no record responded to the find* method. Either the row with the given ID doesn’t exist or the row didn’t meet the additional restrictions.

ドキュメントはこう言ってるのに。
そもそも、レコードがなかったくらいでException投げてくるのって重い気がする。
ARだけになにか理由があるんだろうけど、それが知りたい。

LINEで送る
Pocket

カテゴリー: Rails タグ:
  1. 芳賀
    2007 年 8 月 15 日 22:23 | #1

    こんばんは。ワイズの芳賀です。

    「RailsによるアジャイルWebアプリケーション開発」
    225ページのコラム(David曰く raiseすべきか、しないべきか?)にこの挙動の違いについて解説されています。

  2. yoshuki
    2007 年 8 月 16 日 01:04 | #2

    確認しました、ありがとうございました。
    ページを開いたら「おーそうなのか」と思った記憶がよみがえってきた。orz

コメントは受け付けていません。