2010-11-25 3 views
0
irb(main):104:0> s = Status.all 
=> [#<Status id: 1, card_id: 1, user_id: 1, next: "2001-01-01 00:00:00", level: 1,   created_at: nil, updated_at: nil>, #<Status id: 2, card_id: 2, user_id: 1, next: "2001-01-01 00:00:00", level: 1, created_at: nil, updated_at: nil>, #<Status id: 3, card_id: 3, user_id: 1, next: "2011-01-01 00:00:00", level: 1, created_at: nil, updated_at: nil>] 
irb(main):105:0> s[2].next < Time.now 
=> false 
irb(main):106:0> s[1].next < Time.now 
=> true 
irb(main):107:0> Status.where("next < ?", Time.now) 
=> [#<Status id: 1, card_id: 1, user_id: 1, next: "2001-01-01 00:00:00", level: 1, created_at: nil, updated_at: nil>, #<Status id: 2, card_id: 2, user_id: 1, next: "2001-01-01 00:00:00", level: 1, created_at: nil, updated_at: nil>, #<Status id: 3, card_id: 3, user_id: 1, next: "2011-01-01 00:00:00", level: 1, created_at: nil, updated_at: nil>] 

Je suppose que l'instruction Status.where renvoie uniquement 2 objets. Il semble que le moins de la condition dans la clause where ne fonctionne pas. Si je le change à un plus grand que, la requête renvoie [].Requête conditionnelle ActiveRecord avec les dates ne fonctionnant pas

suivant est mis en place comme datetime dans la migration

Pourquoi est-ce conditionnelle où la requête ne fonctionne pas? Merci

+0

Essayez de changer Time.now pour Time.now.utc – Bohdan

Répondre

0

Vous avez raison, cela devrait fonctionner, en supposant que le serveur de base de données a l'heure correcte. Quel type de base de données interrogez-vous? Veuillez mettre à jour votre question avec celle-ci et la requête générée par la méthode .where().

0

Au début, vous devriez essayer de forcer DB formattage dans votre requête: Time.now.to_s(:db)

Si cela ne fonctionne pas, en utilisant un fuseau horaire pourrait être une bonne idée.

Time.zone.now.to_s(:db) 
Questions connexes