find_or_create_byとfind_or_initialize_byの違い
読んだもの
学んだこと
両者の違いは下記の通り。
- find_or_create_byだと新規作成して保存
- find_or_initialize_byして保存はしない
保存しないことのメリットは、新規作成するときのみ併せて何かする、という処理ができること。 find_or_create_byは新規作成と同時に保存してしまうので、新しいレコードなのか既にあるレコードなのか判断できず、上記のような処理はできない。
例えば、下記のように使う。
@user = User.find_or_initialize_by(name: 'test') unless @user.persisted? # @user が保存されていない場合の処理を書く @user.save end end