brazilian-rails icon indicating copy to clipboard operation
brazilian-rails copied to clipboard

Rails 4 não é possível combinar usar_como_cpf com a validação uniqueness

Open jorgevilaca82 opened this issue 11 years ago • 9 comments

TypeError in PessoaFisicasController#update "can't cast Cpf to string"

"if @pessoa_fisica.update(pessoa_fisica_params)"

Erro ocorre ainda no passagem de parâmetros no controller para o model. Só ocorre quando existe uma validação do tipo uniqueness associada

ex:

validates :cpf, uniqueness: true, :if => "cpf.valido?"
usar_como_cpf :cpf

jorgevilaca82 avatar Jan 17 '14 22:01 jorgevilaca82

Mesma coisa aqui, no momento eu resolvi esse problema fazendo a validação manualmente:

validate :cpf_unico

def cpf_unico
    if self.cpf and !self.cpf.to_s.empty? and Usuario.where(cpf: self.cpf).where('id <> ?', self.id || 0).first
      errors.add(:cpf, "já está sendo usado")
    end
end

rogeriochaves avatar Feb 17 '14 16:02 rogeriochaves

Mesmo problema, alguém entendeu porque tá dando esse erro? O cast do cpf para string tá funcionando normalmente.

fbbergamo avatar Mar 13 '14 20:03 fbbergamo

Mesmo erro aqui... o ActiveRecord está verificando o tipo do campo para fazer conversões caso o banco utilizado não suporte o tipo. https://github.com/rails/rails/blob/294d418f4ca44dd5a454b2e27b79dbb8f1251d85/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb#L78

No caso, a gem está criando um tipo Cpf, e este tipo não existe nesse método type_cast...

izidorome avatar Mar 31 '14 18:03 izidorome

Caso necessitem apenas da validação de CPF, essa gem funciona perfeitamente com o Rails 4: https://github.com/sobrinho/cpf_validator

izidorome avatar Mar 31 '14 19:03 izidorome

Pessoal, Consegui resolver este problema da seguinte maneira:

validates :cpf, presence: true, uniqueness: true, cpf: true

A mesma solução quando for cnpj

validates :cnpj, presence: true, uniqueness: true, cnpj: true

diegoqlima avatar Jul 02 '14 15:07 diegoqlima

Legal, Mas minha regra diz que -só- será verificado se é único -se- for válido. :/ Assim ele só vai executar uma validação se passar pela outra

jorgevilaca82 avatar Jul 02 '14 19:07 jorgevilaca82

Verdade, desculpe pela falsa afirmação. Estou verificando outra forma.

diegoqlima avatar Jul 02 '14 20:07 diegoqlima

Mesmo problema, com CNPJ.. alguém chegou na solução ?

breim avatar Jul 10 '14 01:07 breim

Acabei de resolver meu problema com essa gema https://github.com/rfs/validates_cpf_cnpj Abraço!

breim avatar Jul 10 '14 01:07 breim