Bewährte Methode zur Automatisierung von Titeln nach Gruppe + Vertrauensstufe-Kombinationen

Ich wollte nur ein Update geben und mich bei allen bedanken, die geholfen haben.

Mit den neuesten Änderungen funktioniert das Plugin jetzt genau wie beabsichtigt! Es weist korrekt unterschiedliche Titel basierend auf der primären Gruppe und dem Vertrauenslevel des Benutzers zu.

Ich poste den endgültigen funktionierenden Code unten. Er scheint korrekt zu sein, aber da ich kein Entwickler bin, habe ich mich gefragt, ob es Bereiche für Verbesserungen oder Optimierungen gibt, die ich vielleicht übersehen habe.

app/jobs/scheduled/update-all-titles.rb

# frozen_string_literal: true

module ::Jobs
  class AssignGroupBasedTitles < ::Jobs::Scheduled
    every SiteSetting.update_title_frequency.hours

    def execute(args)
      return unless SiteSetting.add_title_by_group_trust_enabled

      # Holen Sie sich den Einstellungswert, der jetzt eine JSON-Zeichenfolge ist
      rules_json_string = SiteSetting.group_based_title_rules
      return if rules_json_string.blank?

      begin
        # Dies ist die wichtigste Korrektur: Parsen Sie die JSON-Zeichenfolge manuell in ein Ruby-Array
        rules = JSON.parse(rules_json_string)
      rescue JSON::ParserError
        # Wenn das JSON-Format falsch ist, beenden Sie direkt, um zu verhindern, dass der Task fehlschlägt
        Rails.logger.error("Group-Based Titles Plugin: Failed to parse group_based_title_rules JSON.")
        return
      end
      
      return unless rules.is_a?(Array) && rules.present?

      User.transaction do
        rules.each do |rule|
          group_id = rule["group_id"]
          trust_level = rule["trust_level"]
          title = rule["title"]

          next if group_id.blank? || trust_level.blank? || title.blank?

          User.where(primary_group_id: group_id, trust_level: trust_level)
              .where.not(title: title)
              .update_all(title: title)
        end
      end
    end
  end
end

config/settings.yml

plugins:
  add_title_by_group_trust_enabled:
    default: true
    client: true

  # Dies MUSS type: objects sein. Dies war die Fehlerquelle.
  group_based_title_rules:
    type: objects
    default: []
    schema:
      properties:
        group_id:
          type: integer
          name: "Benutzergruppe"
          component: "group-chooser"
        trust_level:
          type: integer
          name: "Vertrauenslevel"
          min: 1
          max: 4
        title:
          type: string
          name: "Titel"
  
  update_title_frequency:
    default: 24
    type: integer

plugin.rb

# frozen_string_literal: true

# name: add-title-by-group-trust-level
# about: Titel basierend auf primärer Gruppe und Vertrauenslevel zuweisen.
# version: 2.1.0
# authors: Your Name

enabled_site_setting :add_title_by_group_trust_enabled

after_initialize do
  require_relative "./app/jobs/scheduled/update-all-titles.rb"
end
1 „Gefällt mir“