tapajos / brazilian-rails

Brazilian Rails é um conjunto de gems para serem usadas com Ruby e com o Ruby on Rails e tem como objetivo unir alguns recursos úteis para os desenvolvedores brasileiros.
http://brazilian-rails.rubyforge.org
361 stars 100 forks source link

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

Open jorgevilaca82 opened 10 years ago

jorgevilaca82 commented 10 years ago

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
rogeriochaves commented 10 years ago

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
fbbergamo commented 10 years ago

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

izidorome commented 10 years ago

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 commented 10 years ago

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

diegoqlima commented 10 years ago

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
jorgevilaca82 commented 10 years ago

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

diegoqlima commented 10 years ago

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

breim commented 10 years ago

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

breim commented 10 years ago

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