これには少しイライラします。カテゴリに関する他の情報を更新する際、必ずしもそのカテゴリの color や text_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 の下にネストしています
)
もちろん、カテゴリ名も常に知っているわけではありません。カテゴリを更新する前に、必ずそれを調べる必要があります。
もしこれらのパラメータが必須でなければ便利でしょう。あるいは、「このフィールドは変更したくない」と示すような構文があればよいかもしれません。例えば、_ を渡せば、その属性を現在の値のままに設定するといった具合です。(必須フィールドの理由がはっきりしないため、有用かどうかはわかりませんが、アイデアを提示しています。)