你好!我有大量分类(约2000个)。现在需要调整其中一个分类的顺序。但标准的“重新排序分类”功能在运行1分钟后会返回502错误。请问该如何解决?谢谢!
你解决这个问题了吗?如果你仍然遇到超时错误,可能需要从站点的 Rails 控制台中直接设置该分类的 position。不过,对于 2000 个分类来说,这样做似乎会相当复杂。
不,还没找到解决方案。
我该怎么做?我对 Rails 控制台一无所知。
我进一步研究了这个问题。面对 2000 个分类,这将是一项相当复杂的操作——更改一个分类的位置会影响其后方所有分类的位置。我不太建议通过控制台来执行此更改。
从技术角度看,我不确定这是否属于漏洞。Discourse 确实允许创建 2000 多个分类,但其用户界面并非为处理如此大量的分类而设计。您过去是否曾成功地对分类进行过重新排序且未遇到问题?
2 个赞
你想要它们按字母顺序排列吗?我曾经写过一个脚本,用来按字母顺序对分类和子分类进行排序。
我想已经有人劝你改用标签了吧?这很可能只是你在使用如此多的分类时会遇到的第一个问题。
2 个赞
不,这是我第一次遇到这个问题,之前从未出现过。我是通过普通界面中的脚本创建这么多分类的。如何通过控制台操作?
我使用标签是为了另一个目的,不能与其他物质混用。现在我需要将一个子类别上移。我在创建之前已经手动排序过。唯一的方法是使用控制台。有什么办法吗?
你可以这样做:
cd /var/discourse
./launcher enter app
rails c
即可进入控制台。然后执行 do stuff 操作。
如果你不理解这些内容,那么你可能不应该自己尝试。
以下是我认为是 2018 年 1 月 12 日左右可用的脚本。我不保证它们一定有效,但也没看出为什么不行。请务必备份数据,并点一支蜡烛祈福。![]()
# 按字母顺序排序所有匹配搜索条件的分类及其子分类
def sort_matching_categories_and_subcategories(search)
categories = Category.where("name like ?", search)
position = 100
categories.order(:name).each do |cat|
position += 5
cat.position = position
cat.save!()
c_position = 0
children = Category.where(:parent_category_id=>cat.id)
children.order(:name).each do |c|
c_position += 5
c.position = c_position
c.save!()
end
end
end
# 按字母顺序排序单个匹配搜索条件的分类下的子分类
def sort_matching_subcategories(search)
categories = Category.where("name like ?", search)
if categories.count > 1
puts "Found more than one category"
end
categories.order(:name).each do |cat|
c_position = 5
children = Category.where(:parent_category_id=>cat.id)
children.order(:name).each do |c|
c_position += 5
c.position = c_position
c.save!()
end
end
end
如果你需要更多帮助并且有预算,请访问 Redirecting… 或发送邮件给我。
希望这能帮到你!
2 个赞