Question Answer Plugin

Это происходило во всех темах, а не только в темах QnA. У нас есть категория «Вопросы», где все темы относятся к QnA, а также используется тег «вопрос» для обозначения темы как QnA.

Теперь поведение немного изменилось: раньше сортировка фиксировала их в конце списка, а теперь они всё ещё не в правильном порядке, но более новые сообщения находятся ниже них.

1 лайк

Спасибо, @AJDurant.

Один из наших клиентов столкнулся с этой проблемой, поэтому я смог внимательнее изучить набор данных, где она возникала. Я считаю, что одна из проблем может заключаться в обработке тем, у которых был удалён тег QA.

Я начал работу над PR, который решает эту проблему, над которым мы с @mbcahyono будем работать.

Чтобы исправить проблему для конкретной темы, выполните следующие команды:

./launcher enter app
rails c
topic = Topic.find(<topic_id>) 
topic.posts.each { |p| p.update_columns(sort_order: p.post_number) }

Если кому-то нужна дополнительная помощь в решении этой проблемы на вашем сервере, пожалуйста, свяжитесь со мной в личных сообщениях, и я помогу вам её устранить (бесплатно).

1 лайк

Извините за задержку с ответом. На этой неделе я был в командировке. Могу подтвердить, что ваш код выше исправляет отдельные посты с проблемами.

Также подтвердил, что выполнение следующей команды НЕ решает проблему:

rake "posts:reorder_posts[1234]"

Есть ли способ запустить это для всех постов — по сути, пройтись циклом по всем постам?

И вы только что запустили rake posts:reorder_posts отдельно, и это не сработало? Пожалуйста, попробуйте сделать это снова в первую очередь.

Если это не поможет, вы можете выполнить следующее:

./launcher enter app
rails c
Post.update_all("sort_order = post_number")

Мы выяснили, в чём проблема. Она появилась ещё в августе. Мы скоро выпустим исправление для неё, добавив тест для этого случая.

2 лайка

Я выполнил указанную выше команду и получил следующую ошибку:

root@REMOVE-web-only:/var/www/discourse# rake posts:reorder_posts
rake aborted!
PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "post_timings_unique"
DETAIL:  Key (topic_id, post_number, user_id)=(1567, 20, 3) already exists.
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.2.0/lib/patches/db/pg.rb:110:in `exec'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.2.0/lib/patches/db/pg.rb:110:in `async_exec'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mini_sql-0.3/lib/mini_sql/postgres/connection.rb:201:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mini_sql-0.3/lib/mini_sql/postgres/connection.rb:173:in `exec'
/var/www/discourse/lib/tasks/posts.rake:368:in `block (3 levels) in <main>'
/var/www/discourse/lib/tasks/posts.rake:351:in `each'
/var/www/discourse/lib/tasks/posts.rake:351:in `block (2 levels) in <main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.3/lib/active_record/connection_adapters/abstract/database_statements.rb:280:in `block in transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.3/lib/active_record/connection_adapters/abstract/transaction.rb:280:in `block in within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.3/lib/active_record/connection_adapters/abstract/transaction.rb:278:in `within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.3/lib/active_record/connection_adapters/abstract/database_statements.rb:280:in `transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.3/lib/active_record/transactions.rb:212:in `transaction'
/var/www/discourse/lib/tasks/posts.rake:312:in `block in <main>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => posts:reorder_posts
(See full trace by running task with --trace)

Я не стал выполнять вторую команду, увидев ошибку дублирования ключа, так как подумал, что это может быть более серьезной проблемой.

Похоже, это проблема вашей базы данных, которая не связана с этим, но мешает внести исправление здесь. Я скоро напишу вам в личные сообщения, и мы сможем отладить это отдельно.

2 лайка

Спасибо @angus, теперь всё, кажется, работает правильно :smiley:

Запуск последней версии и получение следующих ошибок.

Сообщение (49 сообщений)

Исключение задачи: неопределённая константа Jobs::QaUpdateTopicsPostOrder
Возможно, вы имели в виду: Jobs::UpdateTopicPostOrder
Jobs::QAUpdateTopicsPostOrder

Обратная трассировка

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.3/lib/active_support/inflector/methods.rb:284:in const_get' /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.3/lib/active_support/inflector/methods.rb:284:in block in constantize’
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.3/lib/active_support/inflector/methods.rb:280:in each' /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.3/lib/active_support/inflector/methods.rb:280:in inject’
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.3/lib/active_support/inflector/methods.rb:280:in constantize' /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.3/lib/active_support/core_ext/string/inflections.rb:68:in constantize’
/var/www/discourse/app/jobs/base.rb:288:in enqueue' /var/www/discourse/app/jobs/onceoff/onceoff.rb:40:in block in enqueue_all’
/var/www/discourse/app/jobs/onceoff/onceoff.rb:37:in each' /var/www/discourse/app/jobs/onceoff/onceoff.rb:37:in enqueue_all’

Извините за проблему. Работаем над этим, ожидаем слияния:

1 лайк

Круто, я с нетерпением жду, когда это будет слито, и надеюсь на исправление. С праздниками!

Какова роль настройки «Формат один-ко-многим для QnA», которая находится в настройках категории?

1 лайк

Это устаревшая функция, которую мы скоро удалим из плагина QnA. Эта функция теперь имеет собственный отдельный плагин

2 лайка

Как снять свой голос? В настройках есть параметр, определяющий, сколько времени у вас есть на отмену голоса, но я не вижу способа это сделать.

1 лайк

Есть ли хорошие примеры использования этого плагина в реальной жизни? Мне бы очень хотелось увидеть его в действии!

Выберите жёлтый текст «Отменить свой голос» — см. скриншот ниже.

Я заметил несколько замечаний:

  1. Иконка для голосования не учитывает тёмную тему (см. скриншот).
  2. Расположение моего флейра в комментариях к ответам некорректно (см. скриншот).
  3. Стилизация кнопки информации не плохая, но она не совсем соответствует остальной части страницы и занимает лишнее горизонтальное пространство. Возможно, стоит рассмотреть другой подход, например, небольшую текстовую ссылку в правом верхнем углу или рядом с категорией и тегом?
  4. Ссылка «Отменить свой голос» не выглядит как ссылка.
  5. Настройка администратора qa trust level vote limits по умолчанию снята, но я всё равно получаю ошибку «Вы не можете превысить количество голосов для вашего уровня доверия», что не имеет смысла?
  1. Есть ли кнопка «Комментировать» только на первом сообщении, а в ответах эта кнопка внизу не отображается?

Это сделано намеренно или в моей теме есть ошибка?

  1. Кнопка «Плюсануть» смещена. Думаю, это можно исправить через CSS (я попробую это сделать).

Спасибо!

Можем ли мы восстановить обычный порядок сообщений, удалив плагин?

Я вижу, что ранее сообщённая ошибка действительно запутала наши обсуждения :neutral_face:

Да, похоже, что между этим плагином и плагином Solved Plugin возникает конфликт, а именно элемент «Решено» на вашем скриншоте. Этот плагин пока официально не поддерживает плагин Solved Plugin.

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

1 лайк

Спасибо за этот плагин! Один вопрос: что происходит с контентом, если плагин удалить? Понятно, что голоса и специальная сортировка ответов исчезнут, но что случится с «ответами» и «комментариями» для каждого ответа? Они останутся или исчезнут?

Причина моего вопроса в том, что мы начали использовать этот плагин для создания совместного руководства пользователя. Наличие комментариев для каждого ответа очень удобно. Голосование тоже выглядит перспективно, но что, если оно повлечёт за собой непредвиденные последствия, и мы захотим от него избавиться? Было бы жаль потерять руководство только из-за того, что мы хотим убрать голоса.

В худшем случае, я полагаю, мы могли бы скрыть интерфейс голосования через CSS, оставив плагин установленным.

1 лайк

Отличный вопрос.

Комментарии и ответы — это просто сообщения, отображаемые в другом порядке. Они будут сохранены.

Если вы хотите удалить плагин, просто снимите галочку с пункта «Сделать все темы в этой категории QnA» в настройках категории. Это вернёт все сообщения в их исходный порядок.

Например, я только что вернул категорию QnA на try.thepavilion.io к стандартному порядку (то есть хронологическому; это изменится обратно через 24 часа).

https://try.thepavilion.io/t/whats-it-like-to-be-a-bat/22

2 лайка

Отлично, это обнадеживает. Мы попробуем плагин, и если голоса не выполнят свою задачу, у нас будет два варианта их удаления: лёгкий — через CSS, и тяжёлый — отключение плагина. Никакой потери контента. Отличная адаптация основных компонентов Discourse!

Кстати, на всякий случай, если вам интересно: мы используем ваш плагин для создания совместного видеогида по продукту, где людей приглашают добавлять ссылки на видео, созданные другими пользователями, о различных аспектах этого продукта. Мы немного настроили несколько меток, чтобы это работало. Посмотрите здесь: https://bitwish.top/c/bitwig-video-guide/13/none (мы только начали, поэтому страница пока в основном пустая; также большинство подкатегорий скрыты от анонимных пользователей, из-за чего она кажется ещё более пустой).

3 лайка