שיטות עבודה מומלצות לאוטומציה של כותרות לפי קבוצה + רמת אמון

רק רציתי לעדכן ולהודות לכל מי שעזר.

עם השינויים האחרונים, התוסף עובד כעת בדיוק כפי שהתכוונתי! הוא מקצה כותרות שונות בצורה נכונה בהתבסס על הקבוצה הראשית של המשתמש ורמת האמון שלו.

אני מפרסם את הקוד הסופי שעובד למטה. הוא נראה נכון, אבל מכיוון שאני לא מפתח, תהיתי אם ישנם אזורים לשיפור או אופטימיזציה שאולי פספסתי.

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
לייק 1