updates上,gorm不会将 bool 类型更新为false。默认情况下,它更新为true,但是当我尝试更新为false时不会更改。我也没有看到任何错误。可能是什么问题?

type Attendee struct {
    ID             uint   `gorm:"primary_key" gorm:"AUTO_INCREMENT" json:"id,omitempty" mapstructure:"id" csv:"ID"`
    Email          string `json:"email,omitempty" mapstructure:"email" csv:"Email,required"`

    ShowDirectory  bool   `json:"show_directory,omitempty" gorm:"default:true" mapstructure:"show_directory" csv:"-"`
}


var attendee Attendee
// JSON.unmarshal lines here for the &attendee
if err := service.DB.Model(&attendee).Updates(Attendee{
        Email:         attendee.Email,
        ShowDirectory: false
}).Error; err != nil {
    return Attendee{}, err
}

替代解决方案:

这可行,但是我要更新多个属性。所以,我不能使用它。
    att := Attendee{ID: 1}
    service.DB.Model(&att).Update("ShowDirectory", false)

最佳答案

正如@mkopriva所提及,GORM Documentation


解决了:

if err := service.DB.Model(&attendee).Updates(map[string]interface{}{
    "Email":          attendee.Email,
    "ShowDirectory": false
}).Error; err != nil {
    return Attendee{}, err
}

09-20 03:47