dev/mom0tomo

技術メモ

find_or_create_byとfind_or_initialize_byの違い

読んだもの

blog.hello-world.jp.net

学んだこと

両者の違いは下記の通り。

  • 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