J’ai un champ personnalisé pour l’utilisateur afin de stocker l’identifiant du projet dont l’utilisateur est membre.
Objectif : un utilisateur qui saisit un identifiant de projet valide (payant) a accès à des catégories de contenu enrichies.
Vérifier si l’identifiant de projet saisi par l’utilisateur correspond à un identifiant de projet existant est assez facile :
# Définir la méthode pour vérifier le champ personnalisé
def validate_projectid_customfield
# Clé du champ personnalisé et liste prédéfinie
custom_field_key = 'projectid'
predefined_list = ["558", "963", "819"]
# Obtenir la valeur du champ personnalisé de l'utilisateur
user_field_value = self.custom_fields[custom_field_key]
# Si la valeur n'est pas dans la liste prédéfinie, lever une erreur
if !user_field_value.nil? && !user_field_value.empty?
unless predefined_list.include?(user_field_value)
# Lever une erreur de validation que Discourse comprendra
QUE FAIRE ICI ?
end
end
end
Pour le moment, j’ai le code suivant à la place de ‘QUE FAIRE ICI ?’
self.errors.add(:base, I18n.t("user.project.invalid_value"))
raise ActiveRecord::RecordInvalid.new(self)
Mais cela ne semble pas fonctionner.
Si je prends la page de profil et que je saisis une valeur (correcte ou incorrecte), le système réagit d’abord par “Sauvegardé !” immédiatement suivi de “500 Internal Server Error”.
Peut-être que tout cela est dû au mauvais code au début ?
after_initialize do
add_model_callback(User, :before_save) do
validate_projectid_customfield
end
end
Quelqu’un peut-il m’aider ou m’orienter vers la bonne documentation ?
Merci !