Validações personalizadas no Rails 3

O método validates do Rails 3 agrupou os antigos métodos de validação do Rails 2. Na versão 3, usamos o método validates acompanhado do atributo a ser validado e de suas respectivas regras de validação. Trabalhando em um novo projeto necessito validar CPFs e CNPJs, e consequentemente, precisei criar validações adicionais. Esse post mostra como realizei isso.

Inicialmente, criei na pasta lib/ o arquivo my_validations.rb, com o seguinte conteúdo:

# encoding: utf-8

class MyValidations < ActiveModel::Validator
  def validate(record)
    record.errors&#91;:cpf&#93; << "CPF (#{record.cpf}) é inválido" unless Cpf.new(record.cpf).valido?
    record.errors&#91;:cnpj&#93; << "CNPJ (#{record.cnpj}) é inválido" unless Cnpj.new(record.cnpj).valido?
  end
end
&#91;/ruby&#93;

Veja que na primeira linha desse arquivo eu indico o encoding usado, para evitar problemas com os acentos. Utilizo o <a href="https://github.com/tapajos/brazilian-rails">brazilian-rails</a> para confirmar se os documentos informados são ou não válidos. No meu model, eu invoco o método <a href="http://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validates_with">validates_with</a>, indicando a classe recém-criada. 


validates_with MyValidations

Esse foi um exemplo de como resolvi meu problema. Existem outros posts sobre o assunto por aí, boa sorte!

 

Leonardo

Registros de Leonardo Faria sobre desenvolvimento web