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:
class MyValidations < ActiveModel::Validator
def validate(record)
record.errors[:cpf] << "CPF (#{record.cpf}) é inválido" unless Cpf.new(record.cpf).valido?
record.errors[:cnpj] << "CNPJ (#{record.cnpj}) é inválido" unless Cnpj.new(record.cnpj).valido?
end
end
Veja que na primeira linha desse arquivo eu indico o encoding usado, para evitar problemas com os acentos. Utilizo o brazilian-rails para confirmar se os documentos informados são ou não válidos. No meu model, eu invoco o método validates_with, 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!