Mensagens personalizadas com validates
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:
- {?} em algum lugar do texto.
- 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.