LoginSignup
12
3

More than 5 years have passed since last update.

Railsで、 model.save if model.changed? する意味はあるか

Posted at

Railsで、modelの保存をする処理で、何らかの値が変更されているときだけ保存するイディオムとして、以下のようなコードを書いていました。

model.hoge = 'moge'
model.save if model.changed?

ただ、ActiveModel::Base#save の中で、changed == false なら 何も更新されないように処理されているので、明示的に changed? をチェックする必要はあるのかという指摘をプルリクでもらいました。

確かにそんな気もするので、明示的に changed? をチェックすることに意味があるのか、調べてみました。

model.changed == false のとき、model.save を呼び出しても update文が実行されることはありません。
これは、save の実装で changed で変更されたフィールドだけを更新するように処理されていて、changed が無ければ update 文自体が実行されないためです。

ただ、この時でも トランザクションの実行と、callback は呼ばれます。

なので、「changed? == false なら何も処理しない」という意図を表現するなら、

model.save if model.changed?

というイディオムを使うことに意味はある、と自分の中で結論づけました。

ご参考まで。

12
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
3