|

Criando validates personalizados, exemplo com cpf e cnpj
Validates são muito fáceis de usar ! E gerar validates personalizados podem lhe poupar ainda mais tempo !
Neste artigo veremos como criar um validate para cpf e cnpj, e com isso, criar qualquer validate que desejar.
|
|
|
Criando um validate de brincadeira
|
Imagine que gostaria de validar se um determinado atributo é uma String ! Poderíamos criar um validate como no exemplo abaixo:
|
|
|
|
|
Ok, esse validate não existe ! Então vamos implementá-lo
|
|
|
Implementando nosso validate de brincadeira
|
Neste momento, a linha que merece destaque é value.is_a? String, é neste momento que estamos efetuando a validação propriamente dita e adicionando a mensagem de erro.
|
|
No console do rails (vá até o diretório do projeto e digite ruby script/console) podemos simular uma validação para checarmos se tudo está correndo como previsto.
Primeiro instanciamos um objeto Usuario. Após, chamados o método valid? que processa a validação do objeto. Se você chamar os métodos save, por exemplo o método valid? é automaticamente chamado através dos callbacks previstos. Chamando valid? diretamente podemos verificar se existem erros no objeto.
Observe que o valor retornado é false, indicando que houve problemas na validação. Com o método errors.full_messages.to_s, estamos imprimindo uma mensagem de texto completa de todos os atributos com problemas. Onde, errors é um array contendo os erros, full_messages é o mesmo resultado de erros porém de forma completa, e por último to_s para converter um array para uma string a fim de facilitar a visualização.
|
|
|
Entendo como um validate funciona:
|
1) Os validates se encontram no módulo ActiveRecord::Validations::ClassMethods, você pode acessar a API do ruby on rails http://api.rubyonrails.org e verificar nessa classe os validates constantes lá.
Como em Ruby as classes são abertas, podemos redefinir a classe ampliando suas funcionalidades, assim abrimos o próprio módulo citado acima e adicionamos nossos novos validates que nada mais são que métodos constantes no módulo.
2) A variável update = { :message => 'inválido}, define os valores "default's" de nosso validate e configuration.update(attr_names.extract_options!} atualiza os valores que pessamos customizados no model como por exemplo:
validates_string_of :nome_conhecido, :message => 'mensagem customizada'
3) Por último varremos uma iteração com validates_each onde:
record é o próprio objeto model
attr_name é o nome do atributo
value é o valor do atributo
|
|
|
Criando os modules CnpjHelper e CpfHelper
|
Agora iremos criar 2 módulos CnpjHelper e CpfHelper, onde cada um terá um método validate que retorna true/false se o valor passo seja válido ou não.
Estamos colocando eles em um módulo para que você possa aproveitar esses métodos em outros lugares do seu projeto, e ainda, outros métodos poderiam ser agregados como format que receberia um valor e adicionaria os "pontos" e "traços" etc.
|
|
|
 1 2   |
|
|
|
|
|