2017-03-03 3 views
0

間のレコードを取得します場合、私は一定の時間で利用可能なすべての食事を取得したい私は次のモデル(私はRuby on Railsをを使用しています)を持つ時間

# MealSetting model 
    # week_day:integer 
    # pick_up_start_time:datetime 
    # pick_up_end_time:datetime 

を、食事が提供されていますpick_up_start_time <= current_hourおよび pick_up_end_time >= current_hour

pick_up_start_time:datetimepick_up_end_time:datetimeは実際には日付ですが、私は時間を使用しています。私はこのクエリを持って

MealSetting 
    .where('pick_up_start_time::time <= ? and pick_up_end_time::time >= ?', 
    Time.now.utc.strftime("%T"), 
    Time.now.utc.strftime("%T")) 

しかし、データベース内の日付はUTCで保存されているので、それは動作しません。

+0

MySQLを使用している、そうであればのための完璧なユースケースだと思います(?)とTIME(pick_up_end_time)> = TIME(?) '、Time.now、Time.now)' – fanta

+0

私はポストグレを使用しています –

答えて

0

単純なSQLを使用して、now()メソッドを使用できます。 日付の中の時間を比較したいので、ポストグルのdate_partの機能を使用することができます。 `.where( 'TIME(pick_up_start_time)<= TIME:?

MealSetting.where("date_part('hour', NOW()) BETWEEN date_part('hour', pick_up_start_time) AND date_part('hour', pick_up_end_time)") 
+0

私はロジックを取得しますが、なぜ動作しないのかわかりません –

+0

意図した結果が返ってこないのですか? – Iceman

+0

いいえ、そうではありません。 –

0

私はあなたがしようと気になり、これはスコープ

class MealSettings < ApplicationRecord 

    scope :ready_for_pickup, -> { where("hour(pick_up_start_time) <= ?", Time.now.utc.hour) } 
    scope :before_pickup_ends, -> { where("hour(pick_up_end_time) >= ?", Time.now.utc.hour) } 

end 

MealSettings.ready_for_pickup.before_pickup_ends 
+0

問題は、それらの日付の中の時間を比較したい日付を比較したくないということです。 –

+0

OK、それを編集させてください – Sean

+0

それは列 "時間"が存在しないと言います –

関連する問題