此问题出现在所有主题中,而不仅仅是问答(QnA)主题。我们有一个“问题”类别,其中所有主题均为问答类型,同时也使用“问题”标签将主题标记为问答类型。
不过,现在的行为略有不同:之前排序固定后,这些帖子会固定在列表底部;现在它们仍然顺序错乱,但新发布的帖子会排在它们下方。
此问题出现在所有主题中,而不仅仅是问答(QnA)主题。我们有一个“问题”类别,其中所有主题均为问答类型,同时也使用“问题”标签将主题标记为问答类型。
不过,现在的行为略有不同:之前排序固定后,这些帖子会固定在列表底部;现在它们仍然顺序错乱,但新发布的帖子会排在它们下方。
感谢 @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) }
如果任何人需要进一步的实操帮助来解决其服务器上的此问题,请私下联系我,我可以协助您解决(免费)。
抱歉未能及时回复,本周我一直在出差。我可以确认您上面的代码确实解决了个别帖子的相关问题。
我也确认了运行以下命令并不能解决问题:
rake "posts:reorder_posts[1234]"
是否有办法将此操作应用到所有帖子——即遍历所有帖子?
您是否刚刚单独运行了 rake posts:reorder_posts 但发现它不起作用?请先再试一次。
如果仍然无效,您可以运行以下命令:
./launcher enter app
rails c
Post.update_all("sort_order = post_number")
我们已经找到了问题所在。该问题自八月起就已引入。我们将很快推送修复方案,并为此情况添加测试。
我运行了上述命令,但遇到了以下错误:
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)
在看到重复键错误后,我没有运行第二个命令,因为我认为这可能是一个更大的问题。
这看起来是与你数据库相关的一个独立问题,但它阻碍了此处的修复。我稍后会私信你,我们可以单独调试该问题。
谢谢 @angus,现在一切似乎都正常了 ![]()
消息(报告了 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’
抱歉带来这个问题。我们正在处理,等待合并:
太棒了,我很期待看到这次合并以及修复的完成。节日快乐。
“问答一对多格式”设置在类别设置中的作用是什么?
如何撤回投票?在选项中,有一项关于撤回投票时间限制的配置,但我没看到具体如何操作。
有没有这个插件在实际中使用的优秀示例?我很想看看它的实际效果!
点击黄色的“撤销你的赞成票”文本即可——请参见下方的截图。
我注意到以下几个反馈事项:
qa trust level vote limits 管理员设置默认未选中,但我仍然收到错误提示“您的信任等级不允许超过投票数量”,这似乎不太合理?卸载插件后,我们能恢复帖子的正常顺序吗?
我看到之前报告的 bug 确实让我们的对话变得混乱:neutral_face:
是的,此插件与 Solved Plugin 之间似乎存在冲突,即您截图中的“已解决”元素。此插件目前尚未正式支持 Solved Plugin。
可以,您只需在已启用该插件的分类中将其禁用,帖子就会恢复为正常顺序。
感谢您的插件!有一个问题,如果移除插件,内容会怎样?很明显,投票和回复的特殊排序将消失,但“回复”和“评论”对于每个回复会怎样?它们会保留还是会消失?
我问的原因是,我们已经开始使用此插件来构建一个协作式用户指南。为每个回复添加评论非常方便。投票也很有前景,但如果它们带来意想不到的后果,而我们想摆脱它们呢?如果我们想移除投票就丢失指南那就太可惜了。
最坏的情况是,我想我们可以通过 CSS 移除投票界面,但保留插件。
好问题。
评论和答案只是以不同顺序显示的帖子。它们将被保留。
如果您想卸载插件,只需在类别设置中取消选中“将此类别中的所有主题设为问答”即可。这将把所有帖子恢复到其原始顺序。
例如,我刚刚在 try.thepavilion.io 上将问答类别恢复到其标准顺序(即按时间顺序排列(将在 24 小时后再次更改))。
好的,了解这一点很有鼓励性。我们会尝试使用该插件,如果投票未能达到预期目的,那么我们将有两种方法来移除它们:一种是轻量级的方法,通过 CSS;另一种是重量级的方法,禁用该插件。不会丢失任何内容。对 Discourse 核心组件的绝佳改编!
顺便说一句,如果您好奇的话,我们正在使用您的插件来创建一个产品的协作视频指南,人们可以链接到人们创建的关于该产品各个方面的视频。我们自定义了一些标签以使其正常工作。请参阅 Bitwig Video Guide - Bitwish (我们才刚开始,所以大部分是空的;此外,大多数子类别都被静音了,这就是为什么匿名用户看起来更空的原因)。