読者です 読者をやめる 読者になる 読者になる

Rails4で廃止になった findメソッド群

オレオレメモ。 正式には Dynamic finder methods と呼ぶらしい。

Rails3 から Rails4 にアップグレードすると

NoMethodError:
       undefined method `find_or_initialize_by_*****'

というエラーが出ることがある。

こういう時は

Ruby on Rails 4.0 Release Notes — Ruby on Rails Guides

を読むのが正解(だと思う)。

All dynamic methods except for find_by... and find_by...! are deprecated. Here's how you can rewrite the code:

find_all_by_... can be rewritten using where(...).

find_last_by_... can be rewritten using where(...).last.

scoped_by_... can be rewritten using where(...).

find_or_initialize_by_... can be rewritten using find_or_initialize_by(...).

find_or_create_by_... can be rewritten using find_or_create_by(...).

find_or_create_by_...! can be rewritten using find_or_create_by!(...).

この機能を戻したいときには、rails/activerecord-deprecated_finders · GitHub を使うとよい、とのこと。