diff --git a/model/option.go b/model/option.go index 114619648..d37e5dee7 100644 --- a/model/option.go +++ b/model/option.go @@ -59,14 +59,15 @@ func InitOptionMap() { func UpdateOption(key string, value string) error { // Save to database first option := Option{ - Key: key, - Value: value, - } - // When updating with struct it will only update non-zero fields by default - // So we have to use Select here - if DB.Model(&option).Where("key = ?", key).Update("value", option.Value).RowsAffected == 0 { - DB.Create(&option) + Key: key, } + // https://gorm.io/docs/update.html#Save-All-Fields + DB.FirstOrCreate(&option, Option{Key: key}) + option.Value = value + // Save is a combination function. + // If save value does not contain primary key, it will execute Create, + // otherwise it will execute Update (with all fields). + DB.Save(&option) // Update OptionMap updateOptionMap(key, value) return nil