brazilian-rails
brazilian-rails copied to clipboard
Rails 4 não é possível combinar usar_como_cpf com a validação uniqueness
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
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
Mesmo problema, alguém entendeu porque tá dando esse erro? O cast do cpf para string tá funcionando normalmente.
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...
Caso necessitem apenas da validação de CPF, essa gem funciona perfeitamente com o Rails 4: https://github.com/sobrinho/cpf_validator
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
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
Verdade, desculpe pela falsa afirmação. Estou verificando outra forma.
Mesmo problema, com CNPJ.. alguém chegou na solução ?
Acabei de resolver meu problema com essa gema https://github.com/rfs/validates_cpf_cnpj Abraço!