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!