From f376d94a492ba475cf5372178c5fa579ffc828b1 Mon Sep 17 00:00:00 2001 From: Zhang Chao Date: Tue, 8 Sep 2026 17:48:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=91=98=E8=A6=81=E4=B8=BA=E7=A9=BA=E5=8F=96?= =?UTF-8?q?=E5=89=8D120=E5=AD=97=E7=AC=A6=EF=BC=8C=E5=88=A0=E9=99=A4tag?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=88=A0=E9=99=A4=E5=85=B3=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handlers/backend/tag.go | 9 ++++++++- handlers/frontend/view.go | 8 ++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/handlers/backend/tag.go b/handlers/backend/tag.go index 27ae7c2..853994b 100644 --- a/handlers/backend/tag.go +++ b/handlers/backend/tag.go @@ -7,6 +7,7 @@ import ( "goblog/models" "github.com/gin-gonic/gin" + "gorm.io/gorm" ) // 获取标签列表 @@ -103,7 +104,13 @@ func DeleteTag(c *gin.Context) { return } - if err := database.DB.Delete(&tag).Error; err != nil { + // 使用事务:先清除 post_tags 中该标签的关联记录,再删除标签本身,保证数据一致性 + if err := database.DB.Transaction(func(tx *gorm.DB) error { + if err := tx.Exec("DELETE FROM post_tags WHERE tag_id = ?", tag.ID).Error; err != nil { + return err + } + return tx.Delete(&tag).Error + }); err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "删除标签失败"}) return } diff --git a/handlers/frontend/view.go b/handlers/frontend/view.go index 33c4672..1ec044e 100644 --- a/handlers/frontend/view.go +++ b/handlers/frontend/view.go @@ -131,10 +131,10 @@ func IndexView(c *gin.Context) { // 如果摘要为空,则从内容中提取摘要 for i := range posts { - if posts[i].Summary == "" && posts[i].Content != "" && len(posts[i].Content) > 120 { - posts[i].Summary = posts[i].Content[:120] - } else { - posts[i].Summary = posts[i].Content + p := &posts[i] + if p.Summary == "" && p.SearchableText != "" { + runes := []rune(p.SearchableText) + p.Summary = string(runes[:min(len(runes), 120)]) } }