カテゴリの順序を保存しようとすると502エラーが発生します

こんにちは!カテゴリが約2000あり、そのうち1つだけ順序を変更する必要があります。標準の「カテゴリの並べ替え」機能は1分後に502エラーで失敗してしまいます。この問題を解決する方法をご教示ください。よろしくお願いいたします!

この問題は解決されましたか?まだタイムアウトエラーが発生している場合は、サイトのRailsコンソールからカテゴリの position を設定する必要があるかもしれません。ただし、2000ものカテゴリでこれを処理するのはやや複雑になるかもしれません。

いいえ、まだ解決策は見つかりませんでした。

それをどうすればよいのでしょうか?Rails コンソールについては何も知りません。

少し詳しく調べてみました。2000 のカテゴリがある場合、これはかなり複雑な操作になります。1 つのカテゴリの位置を変更すると、その後に続くすべてのカテゴリの位置に影響が及ぶからです。コンソールを通じて変更を行うことを提案するのはためらわれます。

技術的には、これがバグかどうかは確信が持てません。Discourse では 2000 以上のカテゴリを作成することは可能ですが、UI はそれほどの数のカテゴリを処理するように設計されていません。過去にカテゴリの順序変更を問題なく行ったことはありますか?

「いいね!」 2

アルファベット順に並べたいですか?以前、カテゴリとサブカテゴリをアルファベット順にソートするスクリプトを作成したことがあります。

すでにタグの使用を勧められた方もいらっしゃるかもしれませんね。これほど多くのカテゴリを抱えると、このような問題は最初のうちだけかもしれません。

「いいね!」 2

いいえ、この問題は初めて遭遇し、以前は発生していませんでした。通常インターフェースでスクリプトを通じてこの数のカテゴリを作成しました。コンソールを通じてどのように行うことができますか?

タグは別の用途で使用しており、他の物質と混在させることができません。現在、1 つのサブカテゴリを上位に移動させる必要があります。以前は作成前に手動で並べ替えていました。コンソールを使用する以外に方法がありません。どのようにすればよいでしょうか?

次のように操作してコンソールにアクセスします。

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

その後、do stuffを実行します。

これらが理解できない場合は、自分で実行したくはないでしょう。

以下は、2018 年 1 月 12 日頃に動作したと思われるスクリプトです。動作を保証するものではありませんが、問題ないはずです。バックアップを取得し、ろうそくを灯してください。:wink:

# 検索に一致するカテゴリとサブカテゴリをアルファベット順に並べ替える

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