【フロントエンドが初めて触る Rails 】save、createの違い
概要
save
、create
、update
といった保存や更新に関するメソッドがいくつかあると思いますが、save
とcreate
で少し役割が被っているように感じたので、それぞれ明確にいつ使用すべきか理解するために違いを調べて書き出してみました。
save
メソッド
1. save
メソッドは、オブジェクトの状態に応じて、レコードをデータベースに保存したり、既存のレコードを更新。
-
新規レコードの保存: オブジェクトがまだデータベースに存在しない場合、
save
はそのオブジェクトを新規レコードとしてデータベースに保存。user = User.new(name: "hoge") user.save
-
既存レコードの更新: オブジェクトが既にデータベースに存在する場合、
save
はそのオブジェクトのデータを更新。user = User.find(1) user.name = "hoge" user.save
特徴:
-
new
で作成されたオブジェクトを保存するときに使う。 - オブジェクトが新規作成か既存の更新かに関係なく使える。
create
メソッド
2. 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
を用いてエラーハンドリングすることが多そうかもと思いました。
Discussion