Я использую действие-as-taggable-on в приложении Ruby on Rails, чтобы пользователи могли добавлять теги в список своих контактов (например, в адресную книгу с тегами).Добавление / обновление контактов с тегами отлично работает для пользователя, используя стандартные пути RESTful contacts/new
, contacts/[:id]
, contacts/:id/edit
и т. Д.
Я сейчас пытаюсь добавить функциональность, чтобы пользователь мог отправить электронное письмоконтакту с просьбой подтвердить и заполнить свои данные.Запрос электронной почты включает в себя ссылку на страницу, созданную на другом контроллере, которая показывает форму (также известную как «форма подтверждения») со всеми контактными данными, за исключением тегов (которые являются персональными для пользователя).
Ссылка на электронную почту имеет вид:
contact_confirmation/[:id]/edit?contact_id=[:contact_id]
Где [:id]
- токен, дающий разовый доступ к контакту для обновления его данных (это похоже на довольно стандартный парольсброс).
Форма подтверждения корректно обновляет все контактные данные, но по какой-то причине теги теряются.Параметры [] в обоих случаях одинаковы, а метод обновления одинаков.
Глядя на журналы, они идентичны до первого COMMIT.Затем форма подтверждения запускает новый процесс (НАЧАЛО) и удаляет теги:
(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
Может кто-нибудь помочь мне разобраться, почему это происходит?Спасибо.