find_or_create_byを使ってみる

find_or_create_byとは

検索条件に合致するデータが存在した場合、1件目のデータを取得し、存在しない場合は新規作成します。
$ モデル名.find_or_create_by(条件)

アプリケーションの土台を作る

$ rails new find_or_create_by_test
$ rails g scaffold User name:string
$ bin/rails db:migrate

find_or_create_byを使って、データを作成する

以下のコードは、name: "Taro"のデータが存在すれば取得、
存在しなければブロックを実行し、データを作成します(今回はこっち)。

User.find_or_create_by(name: "Taro") do |user|
  user.name = "Taro"
end

f:id:maru877:20170707182541p:plain name: "Taro"のデータ作成されました。

find_or_create_byを使って、データを取得する

user = User.find_or_create_by(name: "Taro") do |user|
  user.name = "Taro"
end

f:id:maru877:20170707183119p:plain 既にname: "Taro"のデータは存在するので、今回はデータの取得のみになります。