2009-04-24 6 views
1

Rails renvoie la mauvaise date dans mes enregistrements de base de données. Pour mon modèle ("cible"), si je cours dans le script/console:Rails & SQLite3: Date Mis-Match

Target.find :all 

Je reçois tous mes dossiers avec les dates de lecture sur le terrain "de recorded_on" de "2000-01-01 xx: xx: xx ".

Si je prends la même base de données et exécuter dans la console sqlite3:

SELECT * FROM targets; 

Je reçois tous mes dossiers avec les dates de lecture sur le terrain "de recorded_on" de "2009-04-22 xx: xx: xx ", qui sont les bonnes dates.

Les valeurs de temps semblent être correctes entre les deux, seules les valeurs de date sont désactivées.

Que se passe-t-il?

Répondre

0

La traduction fiable des temps entre les rails et votre base de données dépend de beaucoup de rails et de la configuration de la base de données vaudou que I had no patience to tackle.

Ma solution finale était d'arrêter de stocker les valeurs de temps sous forme de temps dans la base de données. Je stocke ints:

Modelname.time_column = Time.now().to_i 

(En fait, je fais le bit to_i dans une substitution de setter de l'attribut et inverser le processus dans le getter :)

Time.at(read_attribute(:time_column)) 

Il est un hack, mais je suis content de sa simplicité et de la simplicité de son déplacement entre les configurations et les machines de développement. L'inconvénient est, bien sûr, que sql vous donne un int démodé quand vous l'interrogez. MySQL peut avoir des moyens de convertir, mais je doute que SQLite le fera.

+0

Ahh, je vois. Eh bien, cette solution ne fonctionne pas vraiment pour ce dont j'ai besoin (bien qu'elle réponde à ma question). Je viens juste de passer à PostgreSQL - pas de problème ici! Merci! – neezer