2010-06-03 10 views
3

J'ai un modèle ruby ​​qui contient une date d'attribution que je voudrais pouvoir passer en paramètre au format jj/mm/aaaa.Définir le format de la date dans le modèle ruby ​​(sinatra/datamapper)

Cependant, mon sqlite3 db stocke les données au format aaaa-MM-jj, donc quand une date comme 20/10/2010 sera passée, elle ne sera pas lue dans la base de données. J'utilise le framework Sinatra et utilise haml pour la création de balisage. Ai-je besoin d'écrire un assistant qui prend la chaîne de date et la convertit au format correct pour la base de données? Ou puis-je définir un type de format sur l'attribut models?

Merci.

Répondre

2

Vous ne devriez pas avoir à vous soucier de la représentation interne de la date dans la base de données; DataMapper est là pour le faire pour vous. Vous devez simplement vous assurer que vous lui transmettez un objet Date valide.

Consultez http://ruby-doc.org/core/classes/Date.html pour connaître les méthodes disponibles pour la classe Date. Pour votre exemple:

require 'date' 
mydate = '20/10/2010' 
mydate_obj = Date::strptime(mydate, '%d/%m/%Y') 
puts "#{mydate_obj}" # prints 2010-10-20 
0

Je ne sais pas si cela peut aider, il y a quelque temps j'ai eu le même problème: j'utilisais Rack::Utils.escape_html(params[:datetime]) pour échapper html sur l'entrée d'utilisateur et si je tapais une date dans un champ de formulaire comme ceci "25/02/2013" il serait envoyé au modèle DataMapper comme ceci: 16/02/2013 (avec des codes html échappés) donc il l'enregistrait dans le mauvais sens (le jour a fini par être l'heure ou quelque chose de similaire). Peut-être que vous utilisez aussi la méthode "escape_html" d'une manière maladroite?