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",
nclick=>"date_br2iso('model_field')" %>
<%= f.submit "Update",
nclick=>"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
Post em inglês??
o próximo é em nihongo hehehe