最近見つけたので紹介します。 今回は本(Book)モデルを例題にします。
方法
こんな感じでできます。
book = Book.find_or_initialize_by(id: 1) # book = Book.find_or_initialize_by(name: "こころ") # idじゃなくてもOK book.update_attributes( name: "こころ", author: "夏目漱石" )
解説
find_or_initialize_by
メソッドは引数で与えられた要素を使って検索を行います。
見つかった時にはインスタンスを返し、見つからなかった場合は新しくインスタンスを作って返します。
あとは update_attributes
メソッドを使ってDBに値を保存してます。このメソッド内でcreateかupdateの判定はしてくれているようです。
これでif文がぐっと減りますね!