我有两个与m2m关系的模型:

type Post struct {
  ID   uint
  Name string `gorm:"unique"`
  Body string
  Tags []Tag `gorm:"many2many:post_tags;"`
}

type Tag struct {
  ID   uint
  Name string `gorm:"unique"`
}

我正在发送POST请求来创建“post”,它由以下处理程序处理:

func (db *gorm.DB) CreatePost(w http.ResponseWriter, r *http.Request) {
   var post Post
   if err := json.NewDecoder(r.Body).Decode(&post); err != nil {
       ErrorWithJSON(w, "Can not decode json", http.StatusBadRequest)
       return
   }
   db.Save(&post)
   ResponseWithJSON(w, &post, http.StatusOK)
}

现在我将以下POST请求发送到我的api:

{
  "Name": “test1",
  "Body": “body1",
  "Tags": [
        {
          "Name": “tag1"
        },
        {
          "Name": “tag2"
        }
    ]
}

相应的标签和帖子按预期成功保存在DB中 .

但是当我发送下一个请求时,不同的帖子的名称和正文,但相同的标签如下...

{
  "Name": “test2",
  "Body": “body2",
  "Tags": [
        {
          "Name": “tag1"
        },
        {
          "Name": “tag2"
        }
    ]
}

...我想创建逻辑,它将创建新帖子并将现有标签分配给它或以其他方式同时创建新帖子和标签并创建它们之间的关系 . 简单来说,如何检查相关记录是否存在,而不是尝试再次保存但只将它放在关系表上?

使用gorm创建此逻辑的最佳方法是什么?