【フロントエンドが初めて触る Rails 】save、createの違い
概要
save、create、updateといった保存や更新に関するメソッドがいくつかあると思いますが、saveとcreateで少し役割が被っているように感じたので、それぞれ明確にいつ使用すべきか理解するために違いを調べて書き出してみました。
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の使い分け
saveとcreateの違いはわかりました!
ただ、saveのオブジェクトの状態に応じて使うとはどういこと?
save の使いどころ
saveを使う場合、まずオブジェクトを作成し、後続の処理でそのオブジェクトを検査して保存することができる。
もし検査の段階でエラーが発生した場合、エラー処理を色々カスタマイズしながら処理することができる。
user = User.new(name: "hoge")
if user.valid?
user.save
else
p "エラー"
end
もしcreateであればバリデーションエラーが発生した場合でもすぐにエラーが返ってくるので、エラー処理のカスタマイズができない。
createの使いどころ
createは、オブジェクトの生成と保存を一度に行う場合に使うため、新しいレコードをシンプルにデータベースに挿入したいときに使用。
データがすでに整っていて、特にエラーハンドリングやバリデーションチェックをカスタマイズする必要がない場合に適している。
シンプル!
まとめ
まだRails初心者の自分には、各メソッドがどういう働きをするのかはっきり理解できていなかった部分も多かったので、まとめることで理解が深まったと思います。
saveとcreateの使い所を実際に業務や他のコードを見ていると基本的にsaveを用いてエラーハンドリングすることが多そうかもと思いました。
株式会社 Squad のテックブログです。採用情報: speakerdeck.com/siva_official/engineer-recruting-deck
Discussion