Mensagens personalizadas com validates

Carlos Brando
Nome do Jogo
Published in
1 min readApr 17, 2007

Um problema que temos com os validates é que ele insiste em colocar o nome do campo na frente da mensagem, mesmo quando personalizamos ela usando o :message.

validates_presence_of :title, :message => "O campo 'Título' deve ser preenchido"

Na nossa view ficaria assim:

* Title O campo 'Título' deve ser preenchido

Como resolver isto?

Crie um arquivo .rb qualquer dentro da pasta lib com o seguinte conteúdo:

Não vou entrar em detalhes sobre o que o código faz (cabe a você analisar), mas basicamente eu verifico se o texto passado no :message possui:

  1. {?} em algum lugar do texto.
  2. Ou começa com ! (exclamação)

No primeiro caso, simplesmente subistituimos a string “{?}” pelo nome da coluna. O que nos permite criar algo assim:

"O campo '{?}' deve ser preenchido".

No segundo caso, o código verifica se a mensagem começa com o símbolo de exclamação (!). Se sim, deixa a mensagem exatamente como está, ignorando completamente o nome da coluna.

Sendo assim, o código dado como exemplo acima poderia ficar assim:

validates_presence_of :title, :message => "!O campo 'Título' deve ser preenchido"

E o resultado na sua página seria:

* O campo 'Título' deve ser preenchido

Este é apenas um exemplo de como podemos alterar o Rails de forma simples para nossas necessidades.

Originally published at nomedojogo.com on April 17, 2007.

--

--

Carlos Brando
Nome do Jogo

Programmer, CTO at @enjoei, Author of two books about Ruby on Rails, and Host of the @grokpodcast.