Forçar capitalize

22 views
Skip to first unread message

gygfil

unread,
May 11, 2008, 1:01:28 PM5/11/08
to rails-br
Olá turma!
Tenho o _form para inserir novos clientes:

<%= error_messages_for 'client' %>
<!--[form:client]-->

<p><label for="client_dataentrada">Data Entrada</label><br/>
<%= date_select 'client', 'dataentrada', :start_year=> 1960, :order =>
[:day, :month, :year]%></p>

<p><label for="client_nome">Nome do Cliente</label><br/>
<%= text_field 'client', 'nome' %></p>
etc..

O problema é que o funcionário muitas vezes erra na digitação de nomes
próprios(ex: Maria carvalho Santos ou francisco Souza). Para evita
isso tentei forçar um capitalize na action create, tipo
def create
@client= Client.new(params[:client])
@client.nome.capitalize # (Tentei também: @client.nome.capitalize
if @client)
if @client.save # etc
Sem sucesso .

Fui no template new.rhtml:

<% form_tag :action => 'create' do %>
<%= render :partial => 'form' %>
<%= submit_tag "GRAVAR" %>

<%params[:client][nome].capitalize if params[:client][nome] != nil%>

<% end %>
Sem sucesso .
Alguém poderia ajudar?
Grato.

Celestino Gomes

unread,
May 11, 2008, 8:26:22 PM5/11/08
to rail...@googlegroups.com
Uma forma é implementar o before_save no model:

class Client < ActiveRecord::Base
  before_save :normalizar
 
  private
  def normalizar
    self.nome.capitalize!
  end
end

Mas se você usar o plugin Brazilian Rails, pode usar o método nome_proprio.

class Client < ActiveRecord::Base

  before_save :normalizar
 
  private
  def normalizar
    self.nome.nome_proprio!
  end
end

--
Celestino Gomes
http://tinogomes.wordpress.com

Nenhum de nós é tão bom quanto TODOS NÓS JUNTOS!

2008/5/11 gygfil <gcgo...@gmail.com>:

gygfil

unread,
May 11, 2008, 11:17:26 PM5/11/08
to rails-br
Grato Celestino.

Ainda não instalei o plugin Brazilian Rails. É a melhor solução, pois
o capitalize! corrige apenas o primeiro nome. Como o erro de digitação
pode ocorrer em qualquer nome, sua utilização fica muito limitada.

Victor

unread,
May 12, 2008, 8:37:24 AM5/12/08
to rails-br
Creio que a exclamação já resolveria o problema:
@client.nome.capitalize!

Celestino Gomes

unread,
May 12, 2008, 8:50:00 AM5/12/08
to rail...@googlegroups.com
A solução do Vitor também funciona, mas eu prefiro colocar as regras de validação do modelo dentro dele. Mas isso é questão de gosto!

Mas não entendi quando você disse '...o error de digitação pode ocorrer em qualquer nome...'

Abraço!



--
Celestino Gomes
http://tinogomes.wordpress.com

Nenhum de nós é tão bom quanto TODOS NÓS JUNTOS!

2008/5/12 Victor <victo...@gmail.com>:

Ricardo Shiota Yasuda

unread,
May 12, 2008, 10:40:52 AM5/12/08
to rail...@googlegroups.com
Celestino, acho que o que ele quer dizer é que uma pessoa poderia
colocar minúsculas no sobrenome, por exemplo. Nesse caso o capitalize
só iria corrigir a primeira letra da string.

Por isso seria melhor usar o brazilian rails, pois além de colocar
maiúscula em cada palavra, ainda coloca os conectores 'de', 'da', 'e',
etc. em minúsculas (mas isso você já sabe ;))

2008/5/12 Celestino Gomes <tin...@gmail.com>:


--
Ricardo Shiota Yasuda
IT Dept. - Space Prod.
spaceprod.com.br

Eco-Tip: Printing e-mails is usually a waste.

Celestino Gomes

unread,
May 12, 2008, 11:29:52 AM5/12/08
to rail...@googlegroups.com

Foi mal galera. Foi a burrice matinal! Eu realmente não havia entendido isso...


--
Celestino Gomes
http://tinogomes.wordpress.com

Nenhum de nós é tão bom quanto TODOS NÓS JUNTOS!

2008/5/12 Ricardo Shiota Yasuda <rica...@spaceprod.com.br>:

gygfil

unread,
May 12, 2008, 3:01:49 PM5/12/08
to rails-br
Isso aí. Eu quiz dizer "em qualquer nome e sobrenome que compõe o nome
completo do cliente". Assim se for digitado "carlos
henrique".capitalize! #saida=> Carlos henrique.

Abraços.

Celestino Gomes

unread,
May 12, 2008, 5:05:57 PM5/12/08
to rail...@googlegroups.com
Você você não quizer instalar o plugin Brazilian Rails, a forma mais próxima é usar o método titleize!

'mario da silva neto'.titleize! ==> 'Mario Da Silva Neto'

[ ]s



--
Celestino Gomes
http://tinogomes.wordpress.com

Nenhum de nós é tão bom quanto TODOS NÓS JUNTOS!

2008/5/12 gygfil <gcgo...@gmail.com>:

gygfil

unread,
May 12, 2008, 7:40:04 PM5/12/08
to rails-br
Olá Celestino!

Inseri o titleize! e agora foi exibido esse erro:

undefined method `titleize!' for "mauro sergio conrado de
Almeida":String

RAILS_ROOT: ./script/../config/..

Teria relação com as minhas versões de Ruby(1.8.4) e Rails(1.2.2) ??

Grato pela sua atenção.

Abraço.

Celestino Gomes

unread,
May 12, 2008, 9:18:20 PM5/12/08
to rail...@googlegroups.com
Não é problema da versão não, realmente o que acontece que não existe o método titleize!, apenas o titleize.

Curioso! No plugin Brazilian Rails, acabamos implementando por osmose!


[ ]s

--
Celestino Gomes
http://tinogomes.wordpress.com

Nenhum de nós é tão bom quanto TODOS NÓS JUNTOS!

2008/5/12 gygfil <gcgo...@gmail.com>:

Celestino Gomes

unread,
May 12, 2008, 9:20:14 PM5/12/08
to rail...@googlegroups.com
Para conferir!

http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html


--
Celestino Gomes
http://tinogomes.wordpress.com

Nenhum de nós é tão bom quanto TODOS NÓS JUNTOS!


2008/5/12 Celestino Gomes <tin...@gmail.com>:

gygfil

unread,
May 13, 2008, 5:16:38 PM5/13/08
to rails-br
Olá Celestino! Mais uma vez agradeço pela ajuda! Resolvido!
Apenas um pequeno e interessante detalhe de comportamento dos métodos:

self.nome.titleize => celestino gomes
self.nome.capitalize! => Celestino gomes

#A mesma sintaxe funciona para o método capitalize! , mas não para o
método titleize

self.nome= self.nome.titleize => Celestino Gomes

#Assim funciona. Esquisito não? Bem... tá funcionando.

Abraço!





Bruno Azisaka Maciel

unread,
May 14, 2008, 1:12:03 PM5/14/08
to rail...@googlegroups.com
Na verdade, não é esquisito não.

O ! é destrutivo, estão ele modifica o conteúdo do atributo
direto.
Quando não tem o !, ele apenas retorna um valor, sem destruir o que já estava no atributo.

2008/5/13 gygfil <gcgo...@gmail.com>:

gygfil

unread,
May 15, 2008, 7:43:54 PM5/15/08
to rails-br
Entendido Bruno! Grato pela orientação.

Abraço!
Reply all
Reply to author
Forward
0 new messages