2010-11-25 16 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>] 

私は、Status.whereステートメントが2つのオブジェクトだけを返すと予想します。 where句の条件が満たされていないように思えます。より大きい値に切り替えると、クエリは[]を返します。クエリが動作していないところ日付が動作しないActiveRecord条件付きクエリ

次の移行

の日時として設定されてなぜこれが条件付きのでしょうか? ありがとう

+0

Time.nowからTime.now.utcに変更してください。 – Bohdan

答えて

0

データベースサーバーに正しい時刻があると仮定すると、これはうまくいくはずです。どのような種類のデータベースを照会していますか? .where()メソッドで生成されたクエリとクエリで質問を更新してください。

0

最初に、あなたのクエリでDBの整形を強制しようとする必要があります:Time.now.to_s(:db)

それが動作しない場合は、タイムゾーンを使用すると、良いアイデアかもしれません。

Time.zone.now.to_s(:db)