Tengo un campo de usuario personalizado para almacenar el ID del proyecto del que el usuario es miembro.
Propósito: un usuario que ingresa un ID de proyecto válido (de pago) tiene acceso a categorías de contenido enriquecido.
Verificar si el ID de proyecto ingresado por el usuario corresponde a un ID de proyecto existente es bastante fácil:
# Define el método para verificar el campo personalizado
def validate_projectid_customfield
# Clave del campo personalizado y lista predefinida
custom_field_key = 'projectid'
predefined_list = ["558", "963", "819"]
# Obtiene el valor del campo personalizado del usuario
user_field_value = self.custom_fields[custom_field_key]
# Si el valor no está en la lista predefinida, genera un error
if !user_field_value.nil? && !user_field_value.empty?
unless predefined_list.include?(user_field_value)
# Genera un error de validación que Discourse entenderá
WHAT TO DO HERE?
end
end
end
En este momento, tengo el siguiente código en lugar de ‘WHAT TO DO HERE?’:
self.errors.add(:base, I18n.t("user.project.invalid_value"))
raise ActiveRecord::RecordInvalid.new(self)
Pero eso no parece funcionar.
Si tomo la página de perfil y relleno un valor (correcto o incorrecto), el sistema reacciona primero con “¡Guardado!” seguido inmediatamente por “500 Internal Server Error”.
¿Quizás todo se deba al código incorrecto al principio?
after_initialize do
add_model_callback(User, :before_save) do
validate_projectid_customfield
end
end
¿Alguien puede ayudarme o dirigirme a la documentación correcta?
¡Gracias!