업데이트 내용을 공유하고 도움을 주신 모든 분께 감사의 말씀을 전하고자 합니다.
최근 변경 사항 덕분에 플러그인이 제가 의도한 대로 정확히 작동하고 있습니다! 이제 사용자의 기본 그룹과 신뢰 수준에 따라 다른 타이틀을 올바르게 지정합니다.
아래에 최종적으로 정상 작동하는 코드를 게시합니다. 코드는 정확해 보이지만, 개발자가 아닌 관계로 제가 놓쳤을 수 있는 개선 또는 최적화가 필요한 부분이 있는지 궁금합니다.
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
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
group_based_title_rules:
type: objects
default: []
schema:
properties:
group_id:
type: integer
name: "User Group"
component: "group-chooser"
trust_level:
type: integer
name: "Trust Level"
min: 1
max: 4
title:
type: string
name: "Title"
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