Добавление синонима к тому же талу зависает

Всем привет,

Я по ошибке добавил тег A как синоним под тегом A (случайно, с телефона).

  • Удаление синонима выдаёт ошибку 500
  • Кнопка «Отвязать» выдаёт ошибку 422
  • Удаление тега выдаёт неизвестную ошибку

Возможно, это поможет:

  • Я могу переименовать тег A в B, и синоним тоже обновится.
  • Наличие 0 или 1 поста с тегом A не влияет на вышеуказанные ошибки.

Кто-нибудь может воспроизвести это?

2 лайка

Похоже, что такое не должно быть возможно. Я предполагаю, что у вас получилось что-то вроде этого:

Я тестирую это на своём локальном сервере разработки. После создания синонима нажатие кнопки «Удалить синоним» выдаёт ошибку 422. Нажатие на значок корзины для синонима не вызывает ошибку 500, вместо этого тег полностью удаляется.

Думаю, следует добавить защиту, чтобы не позволять назначать тегу самого себя в качестве синонима.

1 лайк

Спасибо, что проверили эту проблему.

Хм, хорошо, это отличается от моей установки. У меня сейчас нет возможности удалить тег или синоним.

Какая версия DIscourse установлена на вашем сайте?

1 лайк

Я только что обновился до новейшей сборки:

2.6.0.beta5 ( 811c610108 )

Поведение такое же, как в моём исходном сообщении.

1 лайк

Мы должны назначить это на следующую неделю @eviltrout. Добавление тега как синонима самого себя — это… не очень хорошо.

2 лайка

Исправлено в:

Спасибо, что сообщили об этой проблеме, @MarcP. :+1:

4 лайка

Открываю эту тему по просьбе @MarcP. Он не может удалить тег даже через консоль.

cd /var/discourse
./launcher enter app
rails c

tag = Tag.find_by_name("tag_name")
tag.destroy

Вышеуказанное не работает для Marc, хотя у меня работает. Можешь подробнее описать свою проблему, Marc?

3 лайка

Команда, которую @techAPJ прислал мне, не сработала. Однако я выполнил (немного отличающиеся) команды, найденные здесь: How can I delete a tag in development database (on local)? - #4 by simon

Я получил следующие результаты, пытаясь удалить свой тег “testing”, у которого есть синонимичный тег: “testing”.

[1] pry(main)> t = Tag.find_by_name('testing')
=> #<Tag:0x000055a268f6f990
 id: 35,
 name: "testing",
 topic_count: 0,
 created_at: Wed, 11 Nov 2020 04:38:06 UTC +00:00,
 updated_at: Thu, 19 Nov 2020 03:44:35 UTC +00:00,
 pm_topic_count: 0,
 target_tag_id: 35>
[2] pry(main)> t.destroy!
SystemStackError: stack level too deep
from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.3/lib/active_record/reflection.rb:120:in `_reflect_on_association'
[3] pry(main)>

попробуйте:

DB.exec("delete from tags where name = 'testing'")
5 лайков

Это сработало! Спасибо, Сэм :slight_smile: Хорошей недели.

2 лайка