按组+信任级别组合自动生成标题的最佳实践

{“content”:“Just wanted to give an update and say thank you to everyone who helped.\n\nWith the latest changes, the plugin is now working exactly as I intended! It correctly assigns different titles based on the user’s primary group and trust level.\n\nI’m posting the final working code below. It seems to be correct, but since I’m not a developer, I was wondering if there are any areas for improvement or optimization that I might have missed.\n\napp/jobs/scheduled/update-all-titles.rb\n\n\n# frozen_string_literal: true\n\nmodule ::Jobs\n class AssignGroupBasedTitles < ::Jobs::Scheduled\n every SiteSetting.update_title_frequency.hours\n\n def execute(args)\n return unless SiteSetting.add_title_by_group_trust_enabled\n\n # 获取设置值,它现在是一个JSON字符串\n rules_json_string = SiteSetting.group_based_title_rules\n return if rules_json_string.blank?\n\n begin\n # 这是最关键的修复:手动将JSON字符串解析成Ruby数组\n rules = JSON.parse(rules_json_string)\n rescue JSON::ParserError\n # 如果JSON格式错误,则直接退出,防止任务失败\n Rails.logger.error(\"Group-Based Titles Plugin: Failed to parse group_based_title_rules JSON.\")\n return\n end\n \n return unless rules.is_a?(Array) && rules.present?\n\n User.transaction do\n rules.each do |rule|\n group_id = rule[\"group_id\"]\n trust_level = rule[\"trust_level\"]\n title = rule[\"title\"]\n\n next if group_id.blank? || trust_level.blank? || title.blank?\n\n User.where(primary_group_id: group_id, trust_level: trust_level)\n .where.not(title: title)\n .update_all(title: title)\n end\n end\n end\n end\nend\n\n\nconfig/settings.yml\n\nplugins:\n add_title_by_group_trust_enabled:\n default: true\n client: true\n\n # This MUST be type: objects. This was the source of the error.\n group_based_title_rules:\n type: objects\n default: []\n schema:\n properties:\n group_id:\n type: integer\n name: \"User Group\"\n component: \"group-chooser\"\n trust_level:\n type: integer\n name: \"Trust Level\"\n min: 1\n max: 4\n title:\n type: string\n name: \"Title\"\n \n update_title_frequency:\n default: 24\n type: integer\n\n\nplugin.rb\n\n# frozen_string_literal: true\n\n# name: add-title-by-group-trust-level\n# about: Assign titles based on primary group and trust level.\n# version: 2.1.0\n# authors: Your Name\n\nenabled_site_setting :add_title_by_group_trust_enabled\n\nafter_initialize do\n require_relative \"./app/jobs/scheduled/update-all-titles.rb\"\nend\n”,“target_locale”:“zh_CN”}

1 个赞