みなさんこんにちは!
のむ(@nomu_engineer)です!
今回の記事では、タイトルにも書いてある通り、saveメソッドとcreateメソッドの違いについてまとめています。
この記事を読むメリット
・saveメソッドとcreateメソッドの違いを知ることができる
・条件分岐式にはsaveメソッドを使う理由がわかる
この記事を読むおすすめの読者
・プログラミング初心者
・駆け出しエンジニア
・Ruby初心者
それでは早速本題に入っていきたいと思います!
そもそもsaveメソッドとcreateメソッドとは??
この二つは、ActiveRecordメソッドと呼ばれるもので、データベースにデータを保存することができるメソッドです。
基本、データベースの操作はSQL言語しかできないのですが、RailsはこのActiveRecordメソッドを使うことでデータベースの操作を行うことができます。
詳しい話は、今回の記事の本質から外れるので、また別の記事で紹介したいと思います!
saveメソッドとcreateメソッドの違い
この2個のメソッドはデータベースにインスタンスのデータを保存できるという意味では同じメソッドです。
では何が違うのでしょうか??
saveメソッドはデータを保存してくれるメソッドですが、インスタンスの生成は行ってくれません。
なので、saveメソッドを使うときは、インスタンスを生成するために、newメソッドを使う必要があります。
newメソッドを使ってインスタンスを生成して、saveメソッドで保存するという流れになります。
それに対して、createメソッドはインスタンスの生成から、保存までひとまとめに行ってくれます。
createはインスタンスの生成もしてくれるので、newメソッドを定義する必要がありません。
そのため、記述の量はsaveメソッドよりもシンプルになります。
これが、saveメソッドとcreateメソッドの違いになります。
条件分岐を用いる場合
もう一つ、違いについて説明していきます!
それが、条件分岐式を用いるときです。
データが保存できた場合と、できなかった場合で処理を変えたいということが多いと思います。
そのときに使うのが条件分岐式のif文ですよね。
もしこの、if文を使いたいのであれば、createメソッドではなく、saveメソッドを使いましょう。
「え、なんで??」と思った方がいるかと思います。
なので、その理由を今から説明していきます!
saveメソッドを用いる理由は以下になります。
createメソッドはデータが保存できようができまいが、返り値として、モデルオブジェクトを返すからです。
つまるところどういうことかというと、
if文でcreateメソッドを使って、条件分岐式を書いても必ず「true」が返ってくるようになってるのです。
データの保存の成功しても、失敗してもcreateメソッドはtrueを返すので、if文で条件分岐していても、必ず、trueの場合の処理が行われるようになってしまいます。
なので、条件分岐式を用いて、データの保存の成功と失敗で処理を変えたい場合はcreateメソッドではなく、saveメソッドを使いましょう!
最後に
以上がsaveメソッドとcreateメソッドの違いになります。
最後にまとめて終わりたいと思います!
・saveメソッドとcreateメソッドはデータを保存することができるメソッド。
・saveメソッドはインスタンスの生成は行ってくれないので、newメソッドが必要になる。
・createメソッドはインスタンスの生成から保存までをひとまとまりで行ってくれるので、記述がシンプル。
・条件分岐式で処理を変えたい場合は、saveメソッドを使う。
こまかいところではありますが、必ず抑えておきたいポイントですので、しっかり抑えておきましょう!!
ありがとうございました!