Nein, der vorherige Code, den ich mit einer KI ausprobiert habe, funktionierte auch nicht. Nachdem alles eingerichtet war, passierte überhaupt nichts.
Ich wollte Ihnen den vollständigen Code meines letzten Versuchs zeigen. Ich hoffte, Sie könnten sehen, was ich falsch mache.
1. plugin.rb
# name: add-title-by-group-trust-level
# about: weise Titel über die primäre Gruppe + Vertrauensstufe mittels SQL zu
# version: 0.2
# authors: your-name
# Hinweis: Ich bin mir nicht sicher, ob ich hier eine 'require'-Zeile benötige, um die Job-Datei zu laden.
# Ich vermute, das könnte das fehlende Stück sein.
enabled_site_setting :add_title_by_group_trust_enabled
2. app/jobs/scheduled/update-all-titles.rb
module ::Jobs
class UpdateTitles < ::Jobs::Scheduled
every SiteSetting.update_title_frequency.hours
def execute(args)
return unless SiteSetting.add_title_by_group_trust_enabled
mappings = JSON.parse(SiteSetting.group_trust_level_titles || '{}')
User.transaction do
mappings.each do |group_key, titles|
next unless titles.is_a?(Array)
(1...titles.size).each do |tl|
title = titles[tl]
next if title.blank?
group = Group.find_by("LOWER(name) = ?", group_key.downcase)
next unless group
User.where(primary_group_id: group.id, trust_level: tl, admin: false, moderator: false)
.where.not(title: title)
.update_all(title: title)
end
end
end
end
end
end
3. config/settings.yml
plugins:
add_title_by_group_trust_enabled:
default: false
client: true
group_trust_level_titles:
default: '{"designers":["","Junior Designer","Designer","Senior Designer","Chief Designer"],"developers":["","Junior Developer","Developer","Senior Developer","Tech Lead"]}'
type: string
client: true
multiline: true
update_title_frequency:
default: 24
type: integer
So habe ich es in den Site-Einstellungen konfiguriert:
Ich habe diesen JSON in die Einstellung group_trust_level_titles eingefügt:
{
"designers": ["", "Junior Designer", "Designer", "Senior Designer", "Chief Designer"],
"developers": ["", "Junior Developer", "Developer", "Senior Developer", "Tech Lead"]
}
Das Problem:
Der Job UpdateTitles erscheint nicht im Sidekiq-Scheduler (/sidekiq/scheduler).
Ich habe ihn jedoch in der Rails-Konsole gemäß der Methode, die mir die KI gegeben hat, getestet, und die Kernlogik ist einwandfrei und gibt korrekt alle Benutzer aus, die die Bedingungen erfüllen.
Dies ist das Testskript, das ich in der Rails-Konsole verwendet habe:
mappings = JSON.parse(SiteSetting.group_trust_level_titles || '{}')
mappings.each do |group_key, titles|
next unless titles.is_a?(Array)
(1...titles.size).each do |tl|
title = titles[tl]
next if title.blank?
group = Group.find_by("LOWER(name) = ?", group_key.downcase)
unless group
puts "Konnte Gruppe nicht finden: #{group_key}"
next
end
users = User.where(primary_group_id: group.id, trust_level: tl, admin: false, moderator: false)
.where.not(title: title)
next if users.empty?
puts "====== Gruppe: #{group.name} Vertrauensstufe: #{tl} Neuer Titel: '#{title}' ======"
users.each do |user|
puts "Benutzer ID:#{user.id}, Benutzername:#{user.username}, aktueller Titel:'#{user.title}'"
end
end
end
Es scheint also, dass die Logik selbst korrekt ist, aber Discourse den geplanten Job nicht registriert. Wie auch immer, je mehr ich versuche, es zu ändern, desto verwirrender wird es… Ich bin mir nicht sicher, ob dies der richtige Ansatz ist, und da ich nicht programmieren kann, fühlt es sich sehr schwierig an, dies zu implementieren. Haben Sie eine bessere Methode?