Как настроить объект массива в плагине? Использовать json_schema? type: objects?

Как настроить массив объектов в плагине? Я пробовал использовать json_schema, но для свойств объекта нельзя использовать селекторы вроде category — можно вводить только текст. А тип objects вообще не работает в настройках плагина.

Конфигурация json_schema:

  quectel_online_customer_category_customers:
    default: "[]"
    client: true
    json_schema: QuectelOnlineCustomer::SiteSettings::CategoryCustomersJsonSchema

plugins/quectel-online-customer/lib/quectel_online_customer/site_settings/category_customers_json_schema.rb

# frozen_string_literal: true

module QuectelOnlineCustomer
  module SiteSettings
    class CategoryCustomersJsonSchema
      def self.schema
        @schema ||= begin
          {
            type: "array",
            uniqueItems: true,
            default: [],
            items: {
              type: "object",
              title: "Настройка категории поддержки",
              additionalProperties: false, # Запрет отправки неопределённых полей
              required: %w[category customers], # Оба поля обязательны
              properties: {
                category: {
                  type: "category",
                  description: "Связанная категория форума",
                  label: "Категория"
                },
                customers: {
                  type: "usernames", # Выбор нескольких пользователей вместо одного username
                  description: "Аккаунты поддержки, назначенные на эту категорию, с поддержкой множественного выбора",
                  label: "Пользователи поддержки"
                }
              }
            }
          }
        end
      end
    end
  end
end

type:objects должен работать в плагинах! Мы используем его сами, например, вот здесь:

https://github.com/discourse/discourse/blob/eba9a3b69cf637fccba1a00978f2269b4fccf9d4/plugins/discourse-openid-connect/config/settings.yml#L59-L71

Да, действительно можно. Однако в type:objects также не поддерживается type:category. Моя задача — выбрать категорию и группу.

Понял, значит настройки объекта добавляются напрямую в ваш settings.yml. Формат должен быть таким:

oauth2_category_example:
    type: objects
    default: []
    area: "oauth2"
    schema:
      name: category_rule
      identifier: name
      properties:
        name:
          type: string
          required: true
          label: Имя правила
          description: Подпись для этого правила
        category:
          type: categories
          required: true
          label: Категория
          description: Категория, к которой применяется это правило
          validations:
            max: 1
        groups:
          type: groups
          label: Группы
          description: Группы, связанные с этой категорией

Это приведёт к появлению выпадающего списка категорий, как показано ниже

Не поддерживается одиночный выбор type:category?

Согласно этой конфигурации:

quectel_online_customer_category_customer_group:
    type: objects
    default: []
    schema:
      name: "Группы поддержки по категориям"
      identifier: name
      properties:
        name:
          type: string
          required: true
          label: Название
          description: Название
        category:
          type: categories
          required: true
          label: "Категория"
          description: "Название категории, просмотрите на странице <a href=\"/categories\" target=\"_blank\">все категории</a>"
        group_name:
          type: groups
          required: true
          label: "Название группы поддержки"
          description: "Название группы поддержки, латинские символы, просмотрите на странице <a href=\"/admin/groups\" target=\"_blank\">группы поддержки</a>"

Я столкнулся со следующей ошибкой:

Произошла ошибка:

- При рендеринге:
  {{outlet}} для -top-level
    -top-level
      {{outlet}} для application
        application
          DiscourseRoot
            {{outlet}} для admin
              admin
                {{outlet}} для admin.schema
                  schema
                    SchemaSettingNewEditor
                      SchemaSettingField
                        SchemaSettingTypeCategories
                          CategorySelector

section-link.gjs:149
 Попытка повторного рендеринга, но в приложении Ember произошла непоправимая ошибка во время рендеринга. После устранения причины ошибки необходимо перезагрузить приложение.
categories.gjs:13
 Uncaught (in promise) TypeError: this.args.value?.map is not a function
    at SchemaSettingTypeCategories.<anonymous> (categories.gjs:13:9)

Связано ли это с моей версией?

Discourse v2026.1.4 — Commits · discourse/discourse · GitHub — Ember v6.6.0

Сохранены ли какие-либо устаревшие настройки в параметрах? Если появится кнопка сброса, попробуйте вернуть настройки к значениям по умолчанию.

Кнопка сброса не видна, страница выглядит так, как на скриншоте: под категориями ничего не отображается.

Хм, я не уверен, что там может идти не так… Я тестировал опцию категорий с типом объектов, так что знаю, что она работает, и проблема не должна быть связана с вашей версией. Всё же думаю, что где-то что-то застряло в неправильном состоянии. Можете попробовать создать отдельную настройку с новым именем, просто для проверки? Это где-то на GitHub или где-то ещё, чтобы я мог это попробовать?

type:categories — это допустимо, type:category — нет.

Однако следующая конфигурация также корректно работает в случае выбора только одного элемента, поэтому type:category можно опустить.

category:
  type: categories
  required: true
  label: «Категория»
  description: «Название категории»
  validations:
	max: 1