רק רציתי לעדכן ולהודות לכל מי שעזר.
עם השינויים האחרונים, התוסף עובד כעת בדיוק כפי שהתכוונתי! הוא מקצה כותרות שונות בצורה נכונה בהתבסס על הקבוצה הראשית של המשתמש ורמת האמון שלו.
אני מפרסם את הקוד הסופי שעובד למטה. הוא נראה נכון, אבל מכיוון שאני לא מפתח, תהיתי אם ישנם אזורים לשיפור או אופטימיזציה שאולי פספסתי.
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
# קבל את ערך ההגדרה, שהוא כעת מחרוזת JSON
rules_json_string = SiteSetting.group_based_title_rules
return if rules_json_string.blank?
begin
# זהו התיקון הקריטי ביותר: ניתוח ידני של מחרוזת JSON למערך Ruby
rules = JSON.parse(rules_json_string)
rescue JSON::ParserError
# אם פורמט ה-JSON שגוי, צא מיד כדי למנוע כשל במשימה
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
# זה חייב להיות type: objects. זה היה מקור השגיאה.
group_based_title_rules:
type: objects
default: []
schema:
properties:
group_id:
type: integer
name: "קבוצת משתמש"
component: "group-chooser"
trust_level:
type: integer
name: "רמת אמון"
min: 1
max: 4
title:
type: string
name: "כותרת"
update_title_frequency:
default: 24
type: integer
plugin.rb
# frozen_string_literal: true
# name: add-title-by-group-trust-level
# about: Assign titles based on primary group and trust level.
# 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