我有以下模型(我在轨道上使用ruby):
# 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:datetime
。
pick_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"))
实际上是日期,但我只使用小时数。
我有这个查询,
{{1}}
但它不起作用,因为数据库中的日期存储在utc中。
答案 0 :(得分:0)
您可以使用纯SQL并使用now()
方法。
由于您想要比较日期内的小时数,您可以使用postgres的date_part
功能。
MealSetting.where("date_part('hour', NOW()) BETWEEN date_part('hour', pick_up_start_time) AND date_part('hour', pick_up_end_time)")
答案 1 :(得分: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