active recordのnew_record?とpersisted?の違い
tl;dr
- new_record?はobjectが保存されていないときだけtrueを返します
- persisted?はobjectが保存されていない、かつ今までに削除されていないときtrueを返します
new_record? vs persisted?
new_record?
最近Active Recordにnew_record?というmethodがあることを知りました
これは名前から想像がつくように、Objectが新規のものかそれとも既存のものかを判断してくれます
Objectがdatabaseに保存されていなければtrueが返ります
# User modelを新たに作成 user = User.new(name: "ichiro", age: "20") user.new_record? # true user.save user.new_record? # false
結構便利ですね
新規作成フォームと編集フォームで表示を切り替えたいときなどに役にたちます
persisted?
ただこれ、persisted?というmethodでも同じことができます
trueとfalseは逆になります
# User modelを新たに作成 user = User.new(name: "ichiro", age: "20") user.persisted? # false user.save user.persisted? # true
じゃあ何が違うんでしょうか?
違いは?
同じようなことを調べている人がたくさんいました
結論としては
- new_record?はobjectが保存されていないときだけtrueを返します
- persisted?はobjectが保存されていない、かつ今までに削除されていないときtrueを返します
sourceはかなり似てます
条件は同じでnew_record?
の方は保存されていなければ@new_record (おそらく保存前のオブジェクトが存在する場合true)を返します
persisted?
は@new_recordがtrueまたは@destroyがtrue (これはobjectが削除されるとtrueが入ると思われる)、それ以外のときはfalseを返します
ちなみにpersistは固執する、持続するなどの意味があります
persisitだけで事足りてしまいそうな気がしますがそのうち使い分ける日が来るんだろうか