首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么acts-as-taggable-on标签会在更新过程中丢失?

为什么acts-as-taggable-on标签会在更新过程中丢失?
EN

Stack Overflow用户
提问于 2018-12-06 08:47:12
回答 1查看 262关注 0票数 1

我在Ruby on Rails应用程序中使用了acts as-taggable-on,允许用户将标签添加到他们的联系人列表中(就像带标签的地址簿一样)。对于使用标准RESTful路径contacts/newcontacts/[:id]contacts/:id/edit等的用户来说,添加/更新带有标签的联系人可以完美地工作。

我现在正在尝试添加功能,以便用户可以发送电子邮件给联系人,要求他们确认并完成他们的详细信息。电子邮件请求包括一个页面的链接,该页面构建在不同的控制器上,该页面显示一个表单(也称为“确认表单”),其中包含所有联系方式详细信息,但不包括标签(对用户而言是个人的)。

电子邮件链接的形式为:

contact_confirmation/[:id]/edit?contact_id=[:contact_id]

其中,[:id]是一个令牌,用于一次性访问联系人以更新其详细信息(这类似于非常标准的密码重置)。

确认表单会正确更新所有联系人详细信息,但由于某些原因,标签会丢失。两种情况下的params[]是相同的,更新方法也是相同的。

查看日志,它们在第一次提交之前都是相同的。然后确认表单启动一个新过程(BEGIN)并删除标记:

代码语言:javascript
复制
(0.2ms)  BEGIN
CACHE ActsAsTaggableOn::Tag Load (0.0ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND (taggings.context = 'tags' AND taggings.tagger_id IS NULL)  [["taggable_id", 9], ["taggable_type", "Contact"]]
CACHE ActsAsTaggableOn::Tag Load (0.0ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND (taggings.context = 'tags' AND taggings.tagger_id IS NULL)  [["taggable_id", 9], ["taggable_type", "Contact"]]
CACHE ActsAsTaggableOn::Tag Load (0.0ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND "taggings"."tagger_id" = $3 AND "taggings"."tagger_type" = $4 AND "taggings"."context" = $5  [["taggable_id", 9], ["taggable_type", "Contact"], ["tagger_id", 1], ["tagger_type", "User"], ["context", "tags"]]
ActsAsTaggableOn::Tagging Load (0.6ms)  SELECT "taggings".* FROM "taggings" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND "taggings"."tagger_type" = $3 AND "taggings"."tagger_id" = $4 AND "taggings"."tag_id" IN (5, 43, 44) AND "taggings"."context" = $5  [["taggable_id", 9], ["taggable_type", "Contact"], ["tagger_type", "User"], ["tagger_id", 1], ["context", "tags"]]
SQL (0.5ms)  DELETE FROM "taggings" WHERE "taggings"."id" = $1  [["id", 152]]
ActsAsTaggableOn::Tag Load (0.5ms)  SELECT  "tags".* FROM "tags" WHERE "tags"."id" = $1 LIMIT $2  [["id", 5], ["LIMIT", 1]]
SQL (0.8ms)  UPDATE "tags" SET "taggings_count" = COALESCE("taggings_count", 0) - 1 WHERE "tags"."id" = $1  [["id", 5]]
ActsAsTaggableOn::Tag Load (1.3ms)  SELECT  "tags".* FROM "tags" WHERE "tags"."id" = $1 LIMIT $2  [["id", 5], ["LIMIT", 1]]
SQL (0.8ms)  DELETE FROM "taggings" WHERE "taggings"."id" = $1  [["id", 153]]
ActsAsTaggableOn::Tag Load (0.4ms)  SELECT  "tags".* FROM "tags" WHERE "tags"."id" = $1 LIMIT $2  [["id", 43], ["LIMIT", 1]]
SQL (0.5ms)  UPDATE "tags" SET "taggings_count" = COALESCE("taggings_count", 0) - 1 WHERE "tags"."id" = $1  [["id", 43]]
ActsAsTaggableOn::Tag Load (0.4ms)  SELECT  "tags".* FROM "tags" WHERE "tags"."id" = $1 LIMIT $2  [["id", 43], ["LIMIT", 1]]
ActsAsTaggableOn::Tagging Load (0.3ms)  SELECT "taggings".* FROM "taggings" WHERE "taggings"."tag_id" = $1  [["tag_id", 43]]
SQL (0.5ms)  DELETE FROM "tags" WHERE "tags"."id" = $1  [["id", 43]]
SQL (0.5ms)  DELETE FROM "taggings" WHERE "taggings"."id" = $1  [["id", 154]]
ActsAsTaggableOn::Tag Load (0.4ms)  SELECT  "tags".* FROM "tags" WHERE "tags"."id" = $1 LIMIT $2  [["id", 44], ["LIMIT", 1]]
SQL (0.9ms)  UPDATE "tags" SET "taggings_count" = COALESCE("taggings_count", 0) - 1 WHERE "tags"."id" = $1  [["id", 44]]
ActsAsTaggableOn::Tag Load (0.4ms)  SELECT  "tags".* FROM "tags" WHERE "tags"."id" = $1 LIMIT $2  [["id", 44], ["LIMIT", 1]]
ActsAsTaggableOn::Tagging Load (0.5ms)  SELECT "taggings".* FROM "taggings" WHERE "taggings"."tag_id" = $1  [["tag_id", 44]]
SQL (2.0ms)  DELETE FROM "tags" WHERE "tags"."id" = $1  [["id", 44]]
ActsAsTaggableOn::Tag Load (3.1ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND "taggings"."tagger_id" = $3 AND "taggings"."tagger_type" = $4 AND "taggings"."context" = $5  [["taggable_id", 9], ["taggable_type", "Contact"], ["tagger_id", 1], ["tagger_type", "User"], ["context", "tags"]]
(1.2ms)  COMMIT

有人能帮我弄清楚为什么会这样吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-12-06 09:39:14

回答者:https://stackoverflow.com/a/25018540/6569994

我必须向联系人模型上的set_tag_owner添加if tag_list_changed?条件:

代码语言:javascript
复制
def set_tag_owner
  if tag_list_changed?
    set_owner_tag_list_on(account, :tags, tag_list)
    self.tag_list = nil
  end
end

我认为在正常情况下,每次都必须剥离并重新添加标签。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53642995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档