とりあえず2つ。
タイムスタンプ更新のコールバック関数を変更する
var stubNow time.Time
db.Callback().Update().Register("gorm:update_time_stamp_when_update", func(scope *gorm.Scope) {
if _, ok := scope.Get("gorm:update_column"); !ok {
scope.SetColumn("UpdatedAt", func() time.Time {
return stubNow
})
}
})
gorm:update_time_stamp_when_update
を
UpdatedAtに値を代入する
コールバック関数は参照渡しの時のみ実行されるので、Sava(&model)
を使用しない。
model = ModelA{
ID: 100,
name: "mary",
}
model.UpdatedAt = time.Now().AddDate(0, 0, 1) // Now + 1日にする.
db.Save(&model) // これはUpdatedAtはtime.Now()になってしまう。
db.Model(ModelA{}).Where("id = ?", model.ID).Update(model) // こっちで+1日になる。
実際の実行ではないので、コードが動かないと思いますが、こんな感じで実装すれば良いかと思います。