🦔
Railsの`update_column`と`update`:性能と使い方の違い
Ruby on Railsの開発を進めていると、モデルの属性を更新する方法としてupdate_column
やupdate
が使われることがあります。しかし、これらのメソッドの違いを正確に理解していないと、意図しない動作になる可能性があります。この記事では、これらのメソッドの性能や使い方の違いを具体的なコードとともに解説します。
update_column
- バリデーションをスキップ
- コールバックをトリガーしない
-
updated_at
タイムスタンプは更新されない
user = User.find(1)
user.update_column(:name, "新しい名前")
上記のコードでは、ユーザーの名前が"新しい名前"に直接更新されます。バリデーションやコールバックは実行されず、updated_at
も変更されません。
update
- バリデーションを実行
- 関連するコールバックをトリガー
-
updated_at
タイムスタンプが更新される
user = User.find(1)
user.update(name: "新しい名前")
上記のコードでは、ユーザーの名前が"新しい名前"に更新されますが、このときモデルに定義されたバリデーションやコールバックが実行され、updated_at
も更新されます。
まとめ
-
update_column
は直接的なSQL更新を行い、高速ですが、バリデーションやコールバックをスキップするため注意が必要です。 -
update
はバリデーションやコールバックを実行するため、その分遅くなる可能性がありますが、データの整合性を保つことができます。
開発中にどちらのメソッドを使用するかは、アプリケーションの要件や状況に応じて適切に選択することが大切です。
Discussion