Tenho um campo personalizado para o usuário para armazenar o projectid do projeto do qual o usuário é membro.
Propósito: um usuário que insere um projectid válido (pago) tem acesso a categorias de conteúdo rico.
Verificar se o projectid inserido pelo usuário corresponde a um projectid existente é bastante fácil:
# Define o método para verificar o campo personalizado
def validate_projectid_customfield
# Chave do campo personalizado e lista predefinida
custom_field_key = 'projectid'
predefined_list = ["558", "963", "819"]
# Obtém o valor do campo personalizado do usuário
user_field_value = self.custom_fields[custom_field_key]
# Se o valor não estiver na lista predefinida, gere um erro
if !user_field_value.nil? && !user_field_value.empty?
unless predefined_list.include?(user_field_value)
# Gere um erro de validação que o Discourse entenderá
O QUE FAZER AQUI?
end
end
end
No momento, tenho o seguinte código no lugar de ‘O QUE FAZER AQUI?’:
self.errors.add(:base, I18n.t("user.project.invalid_value"))
raise ActiveRecord::RecordInvalid.new(self)
Mas isso não parece funcionar.
Se eu pegar a página de perfil e preencher um valor (certo ou errado), o sistema primeiro reage com “Salvo!” imediatamente seguido por “500 Internal Server Error”.
Talvez tudo se deva ao código errado no início?
after_initialize do
add_model_callback(User, :before_save) do
validate_projectid_customfield
end
end
Alguém pode me ajudar ou me direcionar para a documentação correta?
Obrigado!