rubyonrails

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!

Avatar photo If you like my content, follow me on Twitter and GitHub TwitterTweet

Comments

comments powered by Disqus