本职 iOS 开发,最近在用 gin + gorm 创建一个服务端学习项目。现在的问题是,我希望将 user 和 profile 分成两个表,每个用户有且仅有一个 profile 记录。需要怎么做才能用户注册生成 user 对象时自动生成对应的 profile 记录。感觉目前的做法很 dirty。
func (this userController) Signup(c *gin.Context) {
username := c.PostForm("username")
password := c.PostForm("password")
if username == "" || password == "" {
err := xerrors.NewError(4101)
panic(&err)
}
hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
log.Fatal(err)
panic(err)
}
var user models.User
if err := c.ShouldBind(&user); err == nil {
user.Password = string(hash)
created := database.Database().Create(&user).RowsAffected > 0
if !created {
errJson := xerrors.NewError(4002)
panic(&errJson)
}
profile := models.Profile{UserID: user.ID}
created = database.Database().Create(&profile).RowsAffected > 0
if !created {
errJson := xerrors.NewError(4002)
panic(&errJson)
}
c.JSON( http.StatusOK, gin.H{"code": 0, "message": "", "data": gin.H{}})
} else {
log.Fatal(err)
panic(err)
}
}
type Profile struct {
gorm.Model
Nickname string `form:"nickname" json:"nickname"`
Birthday string `form:"birthday" json:"birthday"`
Gender uint `form:"gender" json:"gender"`
UserID uint `gorm:"foreignkey:UserID;association_foreignkey:ID"`
}
type User struct {
gorm.Model
Username string `form:"username" json:"username"`
Password string `from:"password" json:"password"`
Profile Profile `from:"-" json:"-"`
Assets []Asset `form:"-" json:"-"`
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.