Wie konfiguriert man Array-Objekte in Plugins? json_schema verwenden? type: objects?

Wie konfiguriert man Array-Objekte in einem Plugin? Ich habe es mit json_schema versucht, aber Objektschreibweisen können keine Selektoren wie category verwenden; es ist nur die Texteingabe möglich. type: objects funktioniert hingegen überhaupt nicht in den Plugin-Konfigurationen.

Die Konfiguration für 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: „Konfiguration der Kategorie-Kunden",
              additionalProperties: false, # Nicht definierte Felder dürfen nicht übermittelt werden
              required: %w[category customers], # Beide Felder sind erforderlich
              properties: {
                category: {
                  type: "category",
                  description: „Verknüpfte Forumskategorie",
                  label: „Kategorie"
                },
                customers: {
                  type: "usernames", # Mehrfachauswahl von Benutzern als Ersatz für den einzelnen Benutzernamen „username"
                  description: „Kundenkonten, die dieser Kategorie zugewiesen sind; Mehrfachauswahl unterstützt",
                  label: „Kundenbenutzer"
                }
              }
            }
          }
        end
      end
    end
  end
end

type:objects sollte in Plugins funktionieren! Wir verwenden es hier beispielsweise auch selbst.

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

Ja, das ist tatsächlich möglich. Allerdings wird type:category auch innerhalb von type:objects nicht unterstützt. Mein Anliegen ist es, Kategorien und Gruppen auszuwählen.

Ah, ich verstehe. Die Objekteinstellungen werden also direkt in deine settings.yml eingefügt. Du solltest sie wie folgt formatieren:

oauth2_category_example:
    type: objects
    default: []
    area: "oauth2"
    schema:
      name: category_rule
      identifier: name
      properties:
        name:
          type: string
          required: true
          label: Regelname
          description: Ein Label für diese Regel
        category:
          type: categories
          required: true
          label: Kategorie
          description: Die Kategorie, auf die diese Regel anwendbar ist
          validations:
            max: 1
        groups:
          type: groups
          label: Gruppen
          description: Mit dieser Kategorie verknüpfte Gruppen

Dadurch wird ein Kategorie-Auswahlfeld wie dieses erzeugt

Wird type:category als einzelne Auswahl nicht unterstützt?

Entsprechend dieser Konfiguration

quectel_online_customer_category_customer_group:
    type: objects
    default: []
    schema:
      name: „Kategorie-Kundenservice-Gruppierung"
      identifier: name
      properties:
        name:
          type: string
          required: true
          label: Name
          description: Name
        category:
          type: categories
          required: true
          label: „Kategorie"
          description: „Kategoriename. Bitte auf der Seite [Alle Kategorien](/categories) einsehen"
        group_name:
          type: groups
          required: true
          label: „Name der Kundenservice-Gruppe"
          description: „Name der Kundenservice-Gruppe, nur lateinische Zeichen. Bitte auf der Seite [Kundenservice-Gruppen](/admin/groups) einsehen"

Ich begegne folgendem Fehler:

Fehler aufgetreten:

- Beim Rendern:
  {{outlet}} für -top-level
    -top-level
      {{outlet}} für application
        application
          DiscourseRoot
            {{outlet}} für admin
              admin
                {{outlet}} für admin.schema
                  schema
                    SchemaSettingNewEditor
                      SchemaSettingField
                        SchemaSettingTypeCategories
                          CategorySelector

section-link.gjs:149
 Beim Versuch, erneut zu rendern, ist ein nicht wiederherstellbarer Fehler in der Ember-Anwendung während des Render-Vorgangs aufgetreten. Bitte laden Sie die Anwendung neu, nachdem Sie die Ursache des Fehlers behoben haben.
categories.gjs:13
 Uncaught (in promise) TypeError: this.args.value?.map ist keine Funktion
    at SchemaSettingTypeCategories.<anonymous> (categories.gjs:13:9)

Hängt das mit meiner Version zusammen?

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

Haben Sie eine veraltete Konfiguration in den Einstellungen gespeichert? Könnten Sie versuchen, sie mit der Schaltfläche „Zurücksetzen“ auf den Standardwert zurückzusetzen, falls diese erscheint?

Ich sehe die Zurücksetzen-Schaltfläche nicht. Die Seite sieht genau so aus wie auf dem Screenshot; unter den Kategorien wird nichts angezeigt.

Hmmm, ich bin mir nicht sicher, was da schiefgehen könnte… Ich habe die Kategorien-Option mit dem Objekttyp getestet, also weiß ich, dass sie funktioniert, und es sollte kein Problem mit deiner Version sein. Ich frage mich trotzdem, ob irgendwo etwas in einem fehlerhaften Zustand feststeckt. Könntest du eine separate Einstellung mit einem neuen Namen nur zum Testen versuchen? Ist das auf GitHub oder woanders verfügbar, damit ich es ausprobieren kann?

type:categories ist in Ordnung, type:category jedoch nicht.

Die folgende Konfiguration funktioniert jedoch auch gut, wenn nur eine Auswahl getroffen wird, sodass type:category nicht erforderlich ist.

category:
  type: categories
  required: true
  label: „Kategorie"
  description: „Kategoriename"
  validations:
	max: 1