🎃

【フロントエンドが初めて触る Rails 】save、createの違い

2024/10/02に公開

概要

savecreateupdateといった保存や更新に関するメソッドがいくつかあると思いますが、savecreateで少し役割が被っているように感じたので、それぞれ明確にいつ使用すべきか理解するために違いを調べて書き出してみました。

1. save メソッド

saveメソッドは、オブジェクトの状態に応じて、レコードをデータベースに保存したり、既存のレコードを更新。

  • 新規レコードの保存: オブジェクトがまだデータベースに存在しない場合、saveはそのオブジェクトを新規レコードとしてデータベースに保存。

    user = User.new(name: "hoge")
    user.save
    
  • 既存レコードの更新: オブジェクトが既にデータベースに存在する場合、saveはそのオブジェクトのデータを更新。

    user = User.find(1)
    user.name = "hoge"
    user.save
    

特徴:

  • newで作成されたオブジェクトを保存するときに使う。
  • オブジェクトが新規作成か既存の更新かに関係なく使える。

2. create メソッド

createメソッドは、オブジェクトの生成とその保存を一度に行うことができる。
データベースに新しいレコードを新規作成するためだけに使われるので、既存のレコードを更新では使用しない。

  • 新規レコードを作成し保存:
    user = User.create(name: "hoge")
    

特徴:

  • オブジェクトのnewでの生成と保存を一度に行う。
  • 新しいレコードの新規作成に使う。
  • 更新には使わない。

saveとcreateの使い分け

savecreateの違いはわかりました!
ただ、saveのオブジェクトの状態に応じて使うとはどういこと?

save の使いどころ

saveを使う場合、まずオブジェクトを作成し、後続の処理でそのオブジェクトを検査して保存することができる。
もし検査の段階でエラーが発生した場合、エラー処理を色々カスタマイズしながら処理することができる。

user = User.new(name: "hoge") 
if user.valid?
  user.save
else
  p "エラー"
end

もしcreateであればバリデーションエラーが発生した場合でもすぐにエラーが返ってくるので、エラー処理のカスタマイズができない。

createの使いどころ

createは、オブジェクトの生成と保存を一度に行う場合に使うため、新しいレコードをシンプルにデータベースに挿入したいときに使用。
データがすでに整っていて、特にエラーハンドリングやバリデーションチェックをカスタマイズする必要がない場合に適している。
シンプル!

まとめ

まだRails初心者の自分には、各メソッドがどういう働きをするのかはっきり理解できていなかった部分も多かったので、まとめることで理解が深まったと思います。
savecreateの使い所を実際に業務や他のコードを見ていると基本的にsaveを用いてエラーハンドリングすることが多そうかもと思いました。

株式会社 SIVA

Discussion