Plugin zur Validierung eines benutzerdefinierten Textfeld-Werts

Ich habe ein benutzerdefiniertes Feld für Benutzer, um die Projekt-ID des Projekts zu speichern, dem der Benutzer angehört.

Zweck: Ein Benutzer, der eine gültige (kostenpflichtige) Projekt-ID eingibt, erhält Zugriff auf Kategorien mit Rich Content.

Die Überprüfung, ob die vom Benutzer eingegebene Projekt-ID mit einer vorhandenen Projekt-ID übereinstimmt, ist recht einfach:

# Definiere die Methode zur Überprüfung des benutzerdefinierten Felds
def validate_projectid_customfield
  # Schlüssel des benutzerdefinierten Felds und vordefinierte Liste
  custom_field_key = 'projectid'
  predefined_list = ["558", "963", "819"]

  # Hole den Wert des benutzerdefinierten Felds des Benutzers
  user_field_value = self.custom_fields[custom_field_key]

  # Wenn der Wert nicht in der vordefinierten Liste enthalten ist, löse einen Fehler aus
  if !user_field_value.nil? && !user_field_value.empty?
    unless predefined_list.include?(user_field_value)
      # Löse einen Validierungsfehler aus, den Discourse versteht
      WAS IST HIER ZU TUN?
    end
  end
end

Derzeit habe ich den folgenden Code anstelle von „WAS IST HIER ZU TUN?“:

self.errors.add(:base, I18n.t("user.project.invalid_value"))
raise ActiveRecord::RecordInvalid.new(self)

Aber das scheint nicht zu funktionieren.

Wenn ich die Profilseite nehme und einen Wert eingebe (richtig oder falsch), reagiert das System zuerst mit „Gespeichert!“ und sofort danach mit „500 Internal Server Error“.

Vielleicht liegt es alles am falschen Code am Anfang?

after_initialize do
  add_model_callback(User, :before_save) do
    validate_projectid_customfield
  end
end

Kann mir jemand helfen oder mich auf die richtige Dokumentation verweisen?

Danke!

Ich weiß mit Sicherheit, dass dieses Codefragment den 500 Internal Server Error verursacht:

Kann mir jemand sagen, wie ich auf den Wert eines benutzerdefinierten Feldes zugreifen kann?

Andere Codefragmente, die auch nicht funktionieren:

custom_field_value = self.user.reload.custom_fields[custom_field_key]
custom_field_value = UserCustomField.where(user_id: self.user.id, name: custom_field_key).pluck(:value).first

Irgendwelche Ideen / Hinweise auf Dokumentation oder Code?