結論
特定の理由がない限りupdateメソッドを活用しよう。
update_column
バリデーションをスキップ
コールバックをトリガーしない
updated_at タイムスタンプは更新されない
例
user = User.find(1) user.update_column(:name, "KOnaN")
もし上記のコードでUserテーブルのnameカラムを更新した場合以下の点に気をつける必要がある。
もしnameカラムに「nameカラムは6文字以内しか登録できないなどのバリデーション」を設定している場合でも6文字以上でも登録できてしまう
nameカラムには小文字のアルファベットしか登録できないように コールバック(大文字を小文字に変換)を設定してもコールバックが呼び出せない
update
バリデーションを実行
関連するコールバックをトリガー
updated_at タイムスタンプが更新される
例
user = User.find(1) user.update_column(:name, "KOnaN")
update_columnでできないことができる。
まとめ
update_columnは直接的なSQL更新を行い、高速ですが、バリデーションやコールバックをスキップするため注意が必要です。
updateはバリデーションやコールバックを実行するため、その分遅くなる可能性がありますが、データの整合性を保つことができます。