Não existe no core do Ruby on Rails um validator para datas, mas existe um plugin que faz muito bem essa tarefa, o nome do plugin é validates_date_time.
Esse plugin está disponível no Github em: http://github.com/nickstenning/validates_date_time/.
Instalação
./script/plugin install git://github.com/nickstenning/validates_date_time.git
Configuração
class Investor < ActiveRecord::Base validates_date :date_of_birth end
Esse validator aceita datas no formato: 2006-01-01 ou 1 Jan 06 ou 1 Jan 2006 ou 10/1/06 ou 1/1/2006, por padrão o plugin espera datas no formato dia/mês/ano, caso você queria datas no formato americano e necessário adicionar a seguinte linha no seu config/environment.rb:
ValidatesDateTime.us_date_format = true
Outro detalhe é que o validates_date por padrão considera que o campo de data é obrigatório, caso você queria que seu preenchimento seja opcional você pode adicionar o parâmetro :allow_nil => true da seguinte forma:
validates_date :date_of_birth, :allow_nil => true
I18n
Eu procurei na internet uma forma elegante para usar I18n no plugin, eu encontrei apenas uma (http://github.com/nickstenning/validates_date_time/blob/master/test/fixtures/en.yml), mas essa solução não contempla todas as mensagens de validações, existe a mensagem de validação de data inválida que eu não consegui traduzir da forma do link anterior, desta forma eu implementei manualmente o I18n para a mensagem de validação “is an invalid date” da seguinte forma:
No arquivo config/locales/pt-BR.yml adicionei o atributo invalid_date:
pt-BR:
# Active Record
activerecord:
errors:
messages:
invalid_date: "é uma data inválida"e no model eu configurei da seguinte forma:
class Investor < ActiveRecord::Base validates_date :date_of_birth, :message => I18n.t('activerecord.errors.messages.invalid_date') end
O plugin também trabalha com validações time e date time, nos formatos: 1pm ou 10:11 ou 12:30pm ou 8am e 1 Jan 2006 2pm ou 31/1/06 8:30am.
Se você gostou desse texto e acha que ajudou você, me recomende:
.
Eu sou bolsista de iniciação cientifíca no TECPAR (Instituto de Tecnologia do Paraná), lá eu estou desenvolvendo pesquisa cientifíca na área de inteligência artificial para jogos. A bolsa tem duração de 1 ano e ontem completou um mês que eu estou lá, está sendo muito proveitosa a experiência, a quantidade de conhecimento que está sendo repassada é imensa, sem contar que eu estou cercado de doutores e mestres.
Para testar os recursos do Flixel eu desenvolvi um jogo de plataforma chamado “Green ninja don’t like the blue ninja”. É um jogo plataforma, onde você é o ninja azul e o seu objetivo é escapar dos ninjas verdes que querem matar você, para isso você tem estrelas que pode atirar nos ninjas verdes eliminando eles, por consequência você obtém uma pontuação por cada ninja verde morto. Os direcionais movimentam o ninja azul, a tecla X pula e a tecla C atira estrela.
