Ho un campo utente personalizzato per memorizzare il projectid del progetto di cui l’utente è membro.
Scopo: un utente che inserisce un projectid valido (a pagamento) ha accesso a categorie di contenuti avanzati.
Verificare se il projectid inserito dall’utente corrisponde a un projectid esistente è abbastanza facile:
# Definire il metodo per controllare il campo personalizzato
def validate_projectid_customfield
# Chiave del campo personalizzato e lista predefinita
custom_field_key = 'projectid'
predefined_list = ["558", "963", "819"]
# Ottenere il valore del campo personalizzato dell'utente
user_field_value = self.custom_fields[custom_field_key]
# Se il valore non è nella lista predefinita, sollevare un errore
if !user_field_value.nil? && !user_field_value.empty?
unless predefined_list.include?(user_field_value)
# Sollevare un errore di validazione che Discourse capirà
COSA FARE QUI?
end
end
end
Al momento ho il seguente codice al posto di “COSA FARE QUI?”:
self.errors.add(:base, I18n.t("user.project.invalid_value"))
raise ActiveRecord::RecordInvalid.new(self)
Ma ciò non sembra funzionare.
Se prendo la pagina del profilo e inserisco un valore (giusto o sbagliato), il sistema reagisce prima con “Salvataggio!” seguito immediatamente da “Errore interno del server 500”.
Forse è tutto dovuto al codice sbagliato all’inizio?
after_initialize do
add_model_callback(User, :before_save) do
validate_projectid_customfield
end
end
Qualcuno può aiutarmi o indirizzarmi alla documentazione corretta?
Grazie!