2009-11-09 4 views
1

Je l'entrée suivante dans ma base de données:comportement de magasin de temps Odd ActiveRecord

t.time :my_time_stamp 

Dans mon contrôleur je mettre à jour comme ceci:

model.update_attributes(:my_time_stamp => Time.now.utc) 

je peux voir que j'écris:

Mon 9 November, 8:54.54 UTC 2009 

Cependant, quand je lis plus tard cette valeur je reçois:

Sat Jan 01 08:54:54 UTC 2000 

Il semble que la partie heure a été enregistrée mais pas la partie date. Je m'attendrais à cela parce que c'est un champ de temps, mais pourquoi est-ce que je finis par stocker et récupérer une date? Je suppose que je dois mal comprendre comment cela fonctionne d'une manière fondamentale ... qu'est-ce que je fais mal?

Ce que je dois faire est de calculer le temps en secondes depuis la mise à jour à la base de données .... y at-il un moyen plus facile de le faire?

Merci!

Répondre

3

Ruby n'a pas un objet de temps non daté, il convertit le champ de temps dateless dans votre base de données cette fois sur un jour arbitraire. Les objets de Ruby's Time encodent un certain nombre de secondes depuis l'époque unix, ils incluent donc la date. La façon correcte de les stocker dans la base de données est avec un champ datetime, ou si vous préférez, vous pouvez utiliser un champ entier et stocker Time.now.to_i.

5

Un champ "heure" ne stocke que l'heure. Pas la date.
Donc, il est logique que vous n'obteniez qu'une heure valide et pas une date valide.

Si vous souhaitez stocker la date et l'heure dans la base de données, vous devriez avoir la migration suivante:

t.datetime :my_time_stamp 
+0

Je pensais cela, mais je suis confus. Ne renvoie pas time.now maintenant un 'time' qui est stocké dans le champ 'time: my_time_stamp', et quand je l'interroge plus tard avec model.my_time_stamp, ne devrais-je pas aussi avoir un temps ....? – cmaughan

+0

Oui mais dans la base de données vous ne stockez que l'heure. Donc vous ne récupérez pas la date. –

+0

oui, c'est mon point ... si je fais model.my_time_stamp alors pourquoi le 'type' de la valeur retournée est-il une date ....? Est-ce parce que la base de données stocke vraiment un objet datetime? Si dans la console rails je fais: model.update_attribute (: my_time_stamp, Time.now.utc), alors j'imprime model.my_time_stamp il ressemble à une date ..... – cmaughan

Questions connexes