最近Ruby on Railsばかりなので、今回もRailsのお話。
何も考えずに特定のIDのレコードを見つける際は、「ActiveRecord::Base#find」という超基本メソッドを使うけれど、同時に、XXXというフィールドに対して「ActiveRecord::Base#find_by_XXX」なるメソッドも定義されているので、「ActiveRecord::Base#find_by_id」でも同じようにidに紐付けて見つけ出せる。
以上は当たり前の話だが、この同じような2つ、重要なところが違う。すなわち、そのIDに紐付くレコードが存在しない場合。
「ActiveRecord::Base#find」は例外が生じる。
1 2 3 4 5 6 7 | Post.find(1) #=> ActiveRecord::RecordNotFound: Couldn't find Post with ID=1 # from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1586:in `find_one' # from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1569:in `find_from_ids' # from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:616:in `find' # from (irb):6 # from :0 |
「ActiveRecord::Base#find_by_id」は nil を返す。
1 2 | Post.find_by_id(1) #=> nil |
このお話はそれなりに有名なようですが、find_by_idを使えば、例えばこういうコードが書けて気分がいいですね。




