Discourse API「カテゴリの更新」に必要なパラメータ

なぜ更新カテゴリのルート(Discourse API Docs の属性が必須なのでしょうか?

slug などの属性は、他の属性を指定せずに更新できるはずです。

これには少しイライラします。カテゴリに関する他の情報を更新する際、必ずしもそのカテゴリの colortext_color を知っているわけではありません。そのため、両方を無難な値に変更するか、まずその情報を取得するために別の API 呼び出しを追加するかのどちらかになります。以下は、discourse_api gem を使った例です。

response = client.categories

cat = response.find {|e| e['name'] == 'Category Name'}

response = client.update_category(
  id: cat['id'],
  name: cat['name'],
  color: cat['color'],
  text_color: cat['text_color'],

  # 実際には更新したい属性を以下に追加
  parent_category_id: 7, # いくつかのカテゴリを #7 の下にネストしています
)

もちろん、カテゴリ名も常に知っているわけではありません。カテゴリを更新する前に、必ずそれを調べる必要があります。

もしこれらのパラメータが必須でなければ便利でしょう。あるいは、「このフィールドは変更したくない」と示すような構文があればよいかもしれません。例えば、_ を渡せば、その属性を現在の値のままに設定するといった具合です。(必須フィールドの理由がはっきりしないため、有用かどうかはわかりませんが、アイデアを提示しています。)

同意します。更新時に色フィールドを必須にする必要はないと思います。おそらく、作成時にも必須にする必要はないでしょう。これを確認し、改善できる点を探ります。

この更新をプッシュしました :slight_smile:

カテゴリの作成時には名前フィールドが引き続き必須ですが、カテゴリの更新時には、更新したい実際のプロパティに加えて、名前、色、テキスト色を指定する必要がなくなりました。