Remover ponto, virgula e traços ao salvar no banco de dados

1,555 views
Skip to first unread message

eltin182

unread,
Feb 24, 2016, 12:32:43 PM2/24/16
to rails-br
Ae galera, blz?
Caras, eu pus uma mascara por um javascript em um formulário, por exemplo de cpf:

999.999.999-22

Daí ao salvar, no banco de dados, ta salvando com os pontos e o traço. Como faço pra deixar só o número no banco? Eu estou gerando esse form usando o devise com o nested forms pra endereço. =l



Rebecca Pinheiro

unread,
Feb 24, 2016, 12:34:11 PM2/24/16
to Rails Br
translate(cpf, '-.', '');

--
--
Você recebeu essa mensagem porquê está inscrito no Google
Groups "rails-br".
Para enviar uma mensagem para o grupo, mande um email para rail...@googlegroups.com
Para se descadastrar, mande um e-mail para
rails-br+u...@googlegroups.com
Visite o grupo em http://groups.google.com/group/rails-br?hl=pt-BR
Leia nossa política de uso: http://goo.gl/YGgt7

---
Você recebeu essa mensagem porque está inscrito no grupo "rails-br" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para rails-br+u...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Rebecca Pinheiro
@rebeccapinheiro

eltin182

unread,
Feb 24, 2016, 12:40:52 PM2/24/16
to rails-br
<%= simple_form_for [resource_name, resource.with_pessoa, resource.with_endereco], url: registration_path(resource_name) do |f| %>
  <%= devise_error_messages! %>

  <%= f.fields_for :pessoa do |p| %>
    <%= p.input :nome %>
    <%= p.input :cpf, label: "CPF", input_html: { class: "mascara-cpf" } %>
  <% end %>
<% end %>

Não sei onde faço isso D:

Everaldo Gomes

unread,
Feb 24, 2016, 12:41:06 PM2/24/16
to rail...@googlegroups.com
Respondi pergunta parecida em 2011. Veja se serve:



página 131

5.4.4 Accessing and Manipulating Attributes Before
They Are Typecast
The Active Record connection adapters, classes that implement behavior specific to
databases, fetch results as strings. Rails then takes care of converting them to other
datatypes if necessary, based on the type of the database column. For instance, integer
types are cast to instances of Ruby’s Fixnum class, and so on.
Even if you’re working with a new instance of an Active Record object, and have
passed in constructor values as strings, they will be typecast to their proper type when
you try to access those values as attributes.
Sometimes you want to be able to read (or manipulate) the raw attribute datawithout
having the column-determined typecast run its course first, and that can be done by using
the attribute_before_type_cast accessors that are automatically created in your
model.
For example, consider the need to deal with currency strings typed in by your
end users. Unless you are encapsulating currency values in a currency class (highly
recommended, by the way) you need to deal with those pesky dollar signs and commas.
Assuming that our Timesheet model had a rate attribute defined as a : decimal type,
the following code would strip out the extraneous characters before typecasting for the
save operation:

class Timesheet < ActiveRecord: : Base
  before_validation : fix_rate
    def fix_rate 
      self[: rate] = rate_before_type_cast. tr(' $, ' , ' ' )
    end
end

Douglas Rossignolli

unread,
Feb 24, 2016, 12:41:46 PM2/24/16
to rail...@googlegroups.com
before_save do
 self.cpf.gsub!(/(\.|\-)/, "")
end
Atenciosamente,
Douglas Rossignolli

eltin182

unread,
Feb 24, 2016, 1:07:13 PM2/24/16
to rails-br
Deu certo, vlwww, só pra deixar registrado aqui pra se um dia alguém buscar aqui:

  before_save do
    self.cpf.gsub!(/(\.|\-)/, "")
    self.telefone.gsub!(/(\(|\)|\-)/, "")
    self.cep.gsub!(/(\-)/, "")
  end


Vcs são muito feras :DDD

Everaldo Gomes

unread,
Feb 24, 2016, 1:08:30 PM2/24/16
to rail...@googlegroups.com
Eu não lembro de cabeça se o before_save é executado após as validações.

--

Carlos Eduardo Ribeiro

unread,
Feb 24, 2016, 2:01:55 PM2/24/16
to rail...@googlegroups.com
Eu acho que vc poderia salvar direto como string no DB.. vc irá realizar cálculos em cima do cpf? (creio que nāo). IMHO, Nāo tem sentido enviar como número. Vc terá que converter pra salvar, e colocar a mascara de novo quando for editar.. 

Everaldo Gomes

unread,
Feb 24, 2016, 2:12:26 PM2/24/16
to rail...@googlegroups.com
Aparentemente, ele salva como string já, mas não quer os números e traços.

CPF é bom validar, o @JacksonPires tem umas gems

Rafael Belo

unread,
Mar 1, 2016, 6:10:18 PM3/1/16
to rails-br
Cara é bem simples.
Você precisa remover tudo o que não for número.
Para isso utilizamos o método gsub onde você deverá passar um padrão de busca (no caso uma, regex).
Então você pode utilizar a lógica, de procurar tudo o que não for número e remover, como abaixo:

'000.000.000-00'.gsub(/[^0-9]/, '')

Assim você poderá usar esta mesma lógica para números de cpf, rg, telefones e outros campos que necessitem.
Reply all
Reply to author
Forward
0 new messages