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

usar_como_cpf com conditional #45

Open izidorome opened 11 years ago

izidorome commented 11 years ago

Estou tentando fazer isso:

class Usuario < ActiveRecord::Base usar_como_cpf :documento, :if => :eh_pessoa_fisica?

def eh_pessoa_fisica? tipo_pessoa == 1 end end

Isso esta me gerando o seguinte erro:

undefined method `options' for #Class:0x00000006cd0a18

Stack Trace: activerecord (3.2.3) lib/active_record/dynamic_matchers.rb:50:in method_missing' brcpfcnpj (3.1.0) lib/brcpfcnpj/cpf_cnpj_activerecord.rb:31:inrescue in add_composed_class' brcpfcnpj (3.1.0) lib/brcpfcnpj/cpf_cnpj_activerecord.rb:28:in add_composed_class' brcpfcnpj (3.1.0) lib/brcpfcnpj/cpf_cnpj_activerecord.rb:18:inblock in init' brcpfcnpj (3.1.0) lib/brcpfcnpj/cpf_cnpj_activerecord.rb:17:in each' brcpfcnpj (3.1.0) lib/brcpfcnpj/cpf_cnpj_activerecord.rb:17:ininit' brcpfcnpj (3.1.0) lib/brcpfcnpj/cpf_cnpj_activerecord.rb:8:in `usar_como_cpf'

jonduarte commented 11 years ago

@rizidoro ao invés de usar o helper da gem. Você pode usar os custom validators fornecidos por ela. Exemplo:

validates :document, cpf: true, if: :eh_pessoa_fisica?
validates :document, cnpj: true, unless: :eh_pessoa_fisica?

def eh_pessoa_fisica?
  tipo_pessoa == 1
end
heber28 commented 11 years ago

por que não fazer assim: se o cpf estiver preenchido então é pessoa fisica se o cnpj estiver preenchido é pessoa juridica e colocar uma validação para tornar obrigatorio o preenchimento de um dos dois.

jonduarte commented 11 years ago

@heber28 acho que no caso do @rizidoro ele está usando o mesmo campo documento para cpf ou cnpj. Se entendi bem, a idéia é que o model Usuario pode ser tanto uma empresa, como uma pessoa. Logo, o campo documento ora é um CPF ora um CNPJ.