Rails Date Kit para formato do Brasil

ATUALIZAÇÃO: Não estou mais utilizando este sistema para datas em português, somente a validação!

Infelizmente a hora ainda não chegou para fazer meu post em inglês 😛 Quem sabe o próximo ?

Motivação: Rails date kit é uma ótima ferramenta para escolha de data (datepicker) e validação, MAS, não tem um bom formato aceito em portugues que seria nosso feijão com arroz: DD/MM/AAAA

Problemática: Quando salvamos a data no formato padrão BR o banco de dados troca o DIA pelo MÊS, obviamente dá caca.. e o date_validator também não aceita o formato.. sh1t !
Porêm.. para tudo há uma solução ! Tadaaammmm

Solução:
Converter a data DD/MM/AAAA para o formato ISO AAAA-MM-DD por JS antes dela ser enviada para o servidor !
(antes de outras obs.. eu sei que essa solução não é nem de longe a melhor, mas.. foi a rápida pra mim.. e ainda treinei um pouco de JS)
Alguem poderia dizer com certa razão: “Ah mas é só adicionar uma função no seu model para cada campo tipo data def campo_data=(valor) e lah dentro modelar estes dados” certo?
-Não exatamente, a não ser que não precisemos utilizar os métodos do Validator, pois ele vem antes não é ?

Instalar o Date Kit conforme as instruções do site http://www.methods.co.nz/rails_date_kit/rails_date_kit.html (bem simples vai..)

Cole esse JS em algum lugar que vai ser incluso em toda app. eu usei em calendar.js

function date_br2iso(data_br)
{

  data = document.getElementById(data_br).value;
  if (data.length > 9){
    iso = "";
    iso = iso.concat( data.substring(6,10),'-'+data.substr(3,2),'-'+data.substr(0,2) )
    document.getElementById(data_br).value = iso;
  }
}

Agora vamos chama-lo toda vez que o usuário clicar em submit de um form que possua um date_field:
<%= f.submit "Create", :onclick=>"date_br2iso('model_field')" %>
<%= f.submit "Update", :onclick=>"date_br2iso('model_field')" %>

*onclick funciona quando o usuário pressiona ENTER tb..

Finalmentes… se o usuário inseriu a data de forma errada ele vai ter que se entender com o validator isso é problema deles..

Uma peq. função ruby para se chamar ao recuperar a data para o formato BR do BD:

(Tipicamente ficaria no Helper da Aplicação)

def date2str(data)
   resp = ""
   unless data.nil?
      resp = data.strftime("%d/%m/%Y")
   end
   return resp
 end

Advertisements

One thought on “Rails Date Kit para formato do Brasil

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s