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