first_or_initializeについて学習したため、アウトプットいたします。
first_or_initializeとは?
first_or_initializeの使い方は?
の順に記述します。
first_or_initializeとは?
whereで検索した条件のレコードが存在すればそのレコードのインスタンスを返し、存在しなければ新しくインスタンスを作るメソッドです。
と言ってもなかなかわかりませんよね。
詳しく説明します。
例えば、
studentというテーブルがあったとして、そこのデータベース上に10人の名前がそれぞれ登録されていたとします。
first_or_initializeメソッドは、
そのデータベース上にそのstudentがいなかった場合→そのstudentを新規登録します。
一方、
studentがすでに登録されていた場合→その生徒の情報を取ってきます。
少しづつわかってきましたか?
すなわちこのメソッドの特徴は
「データの重複を避けること」なんです。
ではどうやって使うのでしょうか?
first_or_initializeの使い方
student = Student.where(name: "佐藤").first_or_initialize
存在しなければ新しくインスタンスを作りたいオブジェクトを定義し、
その後に
where(条件).first_or_initialize
とすると完成です。
上記の例では、
そのデータベース上に佐藤さんがいなかった場合→その佐藤を新規登録します。
一方、
佐藤さんすでに登録されていた場合→佐藤さんの情報(id, age等定義したもの)を取ってきます。