2016-07-27 11 views
3

私はtime属性のモデルを持っています。ユーザーがEメール(午後5時)を受信したい場合の設定です。データベースには21:00:00という名前で保存されています。私は範囲でそれを照会したいと思います。たとえば、リマインダーの時間が「20:55:00」から「21:05:05」までのすべてのユーザーに通知したいとします。Rails:アクティブレコードのモデルの日付ではなく、時間範囲を照会する方法

Railsは完全なDateTimeとして表示する必要があるため、データベースに21:00:00が含まれていますが、レールにロードすると、2000-01-01 17:00:00と表示されます。

scope :receives_report_reminder_at, -> (time) do 
    start = (time - 5.minutes).strftime('%T') 
    ending = (time + 5.minutes).strftime('%T') 

    where(notification_report_reminder_time: start...ending) 
end 

これは私のテストケースで動作しますが、私はテストの外にそれをしようとしたときに動作しません。

私のコードは今のように見えます。思考?シナリオを処理する適切な方法はありますか、それとも間違っているのでしょうか?

答えて

3

あなたが指定したタグで、PostgreSQLデータベースを使用していることがわかります。データベースのメカニズムを使用してDateTimeタイプの列をtimeタイプに変換することができます。だから、簡単な

where('notification_report_reminder_time::time >= ? and notification_report_reminder_time <= ?', start, ending) 
+0

:ダブルコロン演算子(::)を使用して行うことができ

!私はちょうど変換を混乱させ始めました。 – mattmcmanus

関連する問題